Go 中的可寻址和不可寻址怎样理解?

可直接使用 & 操作符取地址的对象,就是可寻址的(Addressable)。比如下面这个例子

 

func main() { 

    name := "iswbm" 

    fmt.Println(&name)  

    // output: 0xc000010200 

程序运行不会报错,说明 name 这个变量是可寻址的。

 

但不能说 "iswbm" 这个字符串是可寻址的。

 

"iswbm" 是字符串,字符串都是不可变的,是不可寻址的,后面会介绍到。

 

在开始逐个介绍之前,先说一下结论

 

指针可以寻址:&Profile{}

变量可以寻址:name := Profile{}

字面量通通不能寻址:Profile{}

# 2. 哪些是可以寻址的?

变量:&x

 

func main() { 

    name := "iswbm" 

    fmt.Println(&name)  

    // output: 0xc000010200 

指针:&*x

 

type Profile struct { 

    Name string 

 

func main() { 

    fmt.Println(unsafe.Pointer(&Profile{Name: "iswbm"})) 

    // output: 0xc000108040 

dawei

【声明】:达州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。