感性认识:函数
1、值类型接收者的方法 至关于 值类型的函数入参
2、指针类型接收者的方法 至关于 指针类型的函数入参优化
代码演示:指针
package main import "fmt" func main() { c1 := Child{1} // c1变量保存的是值类型 c1.Age() // 查看age fmt.Printf("%v", c1) c1.GrowUp() // 值类型调用者,指针类型接受者,age发生改变,实际(&c1).GrowUp() fmt.Printf("%v", c1) c1.TryGrowUp() // 值类型调用者,值类型接受者,age没有改变 fmt.Printf("%v", c1) fmt.Printf("\n-----------------------\n") c2 := &Child{1} // c2变量保存的是指针类型 c2.Age() // 查看age fmt.Printf("%v", c2) c2.GrowUp() // 指针类型调用者,指针类型接受者,age发生改变 fmt.Printf("%v", c2) c2.TryGrowUp() // 指针类型调用者,值类型接受者,age没有改变,实际(*c2).TryGrowUp() fmt.Printf("%v", c2) fmt.Printf("\n-----------------------\n") var p1 People = &Child{1} // p1是一个接口,若将 &Child{1} 改成 Child{1} 则可经过编译 p1.Age() fmt.Printf("%v", p1) p1.GrowUp() fmt.Printf("%v", p1) c1.TryGrowUp() fmt.Printf("%v", p1) } type People interface { Age() GrowUp() } type Child struct { age int } func (c Child) Age() int { return c.age } func (c *Child) GrowUp() { c.age++ } func (c Child) TryGrowUp() { c.age++ }
结果:code
{1}{2}{2}对象
&{1}&{2}{2}接口
cannot use &(Child literal) (value of type *Child) as People value in variable declaration: wrong type for method Agecompilerit
结论io