golang 中的指针
发布时间:2020-12-16 09:30:45 所属栏目:大数据 来源:网络整理
导读:# golang 中的指针 看了一篇 [ 文章 ] (http://blog.51cto.com/steed/2341409),写的很好。这里略微总结下重点: 1. 地址值、unsafe.Pointer、uintptr 的关系 - 地址值 与 unsafe.Pointer 可以互相转换 - uintptr 与 unsafe.Pointer 可以互相转换 - 地址在
# golang 中的指针
看了一篇[文章](http://blog.51cto.com/steed/2341409),写的很好。这里略微总结下重点:
1. 地址值、unsafe.Pointer、uintptr 的关系
- 地址值 与 unsafe.Pointer 可以互相转换
- uintptr 与 unsafe.Pointer 可以互相转换
- 地址在 与 uintptr 不能互相转换
2. 不可寻址的值 (需要指出的是,不可寻址是强行约定的,多数是因为安全)
- 不可变的值不可寻址,包括常量、字面值、字符串变量的值、函数及方法的字面值。
- 临时结果,也就是未被接收的结果,有个例外是切片。
- 破坏一致性的指针,如字典的value。
3. 鉴于上面的内容,下面的代码就很有意思了
```golang
package main
import "fmt"
func main() { ??? // fmt.Println(New().String()) //error!此处行不通! ??? u :=New()
??? fmt.Println(u.String())
}
//User is a demo struct
type User struct {
??? name string
}
//receiver is ptr!
func (u *User) String() string??? return fmt.Sprintf("User{name=%s}",u.name)
//New is to create User!
func() User {
??? User{"default"}
```
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |