type N intfunc(n N)value(){
n++
fmt.Printf("v:%p,%v\n",&n, n)}func(n *N)pointer(){(*n)++
fmt.Printf("v:%p,%v\n", n,*n)}funcmain(){var a N =25
a.value()
fmt.Printf("a: %p,%v\n",&a,a)
a.pointer()
fmt.Printf("a: %p,%v\n",&a,a)}
type data struct{
sync.Mutex
buf [1024]byte}funcmain(){
d := data{}
d.Lock()//编译器会处理为 sync.(*Mutex).Lock() 调用defer d.Unlock()}
方法也有同名隐蔽问题,但利用这种特性,可以实现类似覆盖(override)操作。
type user struct{}type manager struct{
user
}func(user)toString()string{return"user"}func(m manager)toString()string{return m.user.toString()+"; manager"}funcmain(){var m manager
println(m.toString())println(m.user.toString())}
type N intfunc(n N)test(){
fmt.Printf("test.n: %p,%d\n",&n, n)}funcmain(){var n N =25
fmt.Printf("main.n: %p, %d\n",&n,n)
f1 := N.test // func(n N)f1(n)
f2 :=(*N).test // func(n *N)f2(&n)//按方法集中的签名传递正确类型的参数}
type N intfunc(n *N)test(){
fmt.Printf("test.n: %p,%d\n", n,*n)}funcmain(){var n N =100
p :=&n
n++
f1 := n.test
n++
f2 := p.test
n++
fmt.Printf("main.n:%p, %v\n",p,n)f1()f2()}