参考资料:
Docker的Steve Francia大神的分享
go 接收器
go 接收器 指针传递
- 函数、方法中的指针、值
- 在Golang中关于函数的调用:
- 有接收器 -- 方法,其中方法又分为两种:
- 指针方法: 指针做为接收器
- 值方法: 值作为接收器
- 无接收器 -- 函数
- 接收器中两个重要的规则:
- 值只包含值方法集,不包含指针方法集
- 指针包含值方法集,不包含值方法集
- 值和指针的使用可参照准则:
- 传值还是传指针主要依据是"是否共享访问",通常在性能上区别不大
- 如果想要和函数或者方法共享一个值,就传指针,如果不想,就传值
- 是否使用指针接收器
- 如果想和某个方法分享值的时候,使用指针接收器
- 通常方法都用于管理状态值,所以指针接收器是很常用的
- 指针接收器的方法是非并发安全的
- 是否使用值接收器
- 当你想要复制值的时候,使用值接收器
- 如果接收器的类型是空结构体(没有状态),那就直接使用值传递
- 值接收器的方法是并发安全的
目前我所接触的,开发中使用的常见场景,都是使用指针接收器,下面列一个使用值接收器的例子
func(t Time)IsZero()bool{
return t.sec == 0 && t.nsec == 0
}
type People struct{
name string
}
func (p *People) set(p1 *People){
p = p1
fmt.Println("set func :", p.name)
}
func main(){
p := &People{"gjf"}
p1 := &People{"hyc"}
p.set(p1)
fmt.Println(p.name)
}