package main
type I interface {
tt()
pp()
}
func (a *A) tt() {
println(&(a.b))
}
func (a A) pp() {
println(&(a.b))
}
type A struct {
b *B
}
type B struct {
bb string
}
func test(a I) {
a.tt()
}
func test1(a *I) {
aa := *a
aa.tt()
}
func NewI() I {
return &A{
b: &B{bb: "bb"},
}
}
type C struct {
i I
}
func main() {
a := NewI()
switch v := a.(type) {
case *A:
println(&(v.b))
v.pp()
}
c := &C{i: a}
test(a)
test1(&a)
c.i.tt()
}
输出:
0xc00000e010
0xc000032760
0xc00000e010
0xc00000e010
0xc00000e010
自己体会一下。