相关疑难解决方法(0)

是dereference golang struct返回struct的新副本?

为什么当我们使用(*structObj)引用struct时,golang似乎返回structObj的新副本而不是返回原始structObj的相同地址?可能会对此产生一些误解,所以要求善意澄清

package main

import (
    "fmt"
)

type me struct {
    color string
    total int
}

func study() *me {
    p := me{}
    p.color = "tomato"
    fmt.Printf("%p\n", &p.color)
    return &p
}

func main() {
    p := study()
    fmt.Printf("&p.color = %p\n", &p.color)

    obj := *p
    fmt.Printf("&obj.color = %p\n", &obj.color)
    fmt.Printf("obj = %+v\n", obj)

    p.color = "purple"
    fmt.Printf("p.color = %p\n", &p.color)
    fmt.Printf("p = %+v\n", p)
    fmt.Printf("obj  = %+v\n", obj)

    obj2 := *p
    fmt.Printf("obj2 = %+v\n", obj2)
}
Run Code Online (Sandbox Code Playgroud)

产量

0x10434120
&p.color = 0x10434120 …
Run Code Online (Sandbox Code Playgroud)

struct pointers go dereference

11
推荐指数
3
解决办法
1万
查看次数

标签 统计

dereference ×1

go ×1

pointers ×1

struct ×1