首页 > 其他 > 详细

golang 中的指针

时间:2019-01-12 00:55:29      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:pan   code   总结   under   不能   就是   强行   ble   reat   

# golang 中的指针

看了一篇[铁牛棋牌森林舞会](https://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 New() User {
    return User{"default"}
}
```
4. reflect.Type/Value可以处理struct的exported字段,那么unexported字段怎么处理呢?

答案是使用 unsafe.Offsetof,配合 uintptr 和 unsafe.Pointer 来处理!


golang 中的指针

标签:pan   code   总结   under   不能   就是   强行   ble   reat   

原文:https://www.cnblogs.com/larryzeal/p/10258288.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 designnerd.net 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号