参考资料:
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)       
}