golang中指针结构体和非指针结构体

结构体类型 T 和 *T的方法集
  • 定义在结构体 T上的方法属于类型 *T 的方法集中的一员,反之却不然,
    即定义在类型 *T 上的方法并不属于类型 T 的方法集中的一员
  • 为什么定义在类型T上的方法属于类型 *T 的方法集中的一员, 但定义在 类型 *T
    上的方法却不属于类型 T 的方法集合的一员
    • 对于一个指针值 p 在编译阶段对它的解引用 *p 总是合法的
    • 但是对于很多非指针值 v , 在编译阶段, 取它的地址 &v 却并不总是合法的(_ = &"abc"), 难以将 v 自动转换为 &v
  • 直接值不能取地址? 为什么有很多 &T{} 这种用法?
    	pm := &map[string]string{}
    	ps := &[]string{}
    	pst := &struct{}{}
    	pmt := &MyType{}
    
    • &T{} 是为了编程方便, 添加的一个 sugar, 是下面形式的缩写, 而不是临时值不能取地址的一个例外
    temp := T{}
    &temp
    
    • 编译器只会自动对变量取地址, 而不会自动对直接值取地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值