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()}