[go]method的指针声明及非指针声明
刚入手golang,大概弄清楚了method在go里的概念。 method可以为一个type添加(声明)一个方法,例如: type Cat struct { } func (c Cat) Hwo() { fmt.Println("Miah!") } 即对Cat类型(结构体)添加Hwo方法,使其在叫唤的时候可以发出声音。 这种添加方法的代码表现比java好很多(extend),也比python好(需重新声明一个Class)。 按官方的spec可以对应到如上的例子的两种声明: func (c Cat) Hwo() func (c *Cat) Hwo() 两种有什么区别呢? package main import ( "fmt" ) type Cat struct { age int } func (c Cat) AddAge() { fmt.Println("add age!") fmt.Println(c.age + 10) c.age += 1 } func (c *Cat) AddOneAge() { c.age += 1 fmt.Println("add one age!") } func main() { cat := &Cat{1} fmt.Println(cat) cat.AddAge() fmt.Println(cat) cat.AddOneAge() fmt.Println(cat) } 结果: &{1} add age! 11 &{1} add one age! &{2} 修改cat声明方式为 cat := Cat{1} 结果: {1} add age! 11 {1} add one age! {2} 发生了什么? 如何解读?
详见Reference.3 题外话,这里有个例子可以阐明一个状况 Reference1.http://nathanleclaire.com/blog/2014/08/09/dont-get-bitten-by-pointer-vs-non-pointer-method-receivers-in-golang/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |