head 1.2; access; symbols; locks strick:1.2; strict; comment @# @; 1.2 date 2012.10.01.07.47.09; author strick; state Exp; branches; next 1.1; 1.1 date 2012.09.30.07.56.10; author strick; state Exp; branches; next ; desc @@ 1.2 log @/dev/null @ text @package main import . "fmt" type A struct { My VirtA a int } func (me *A) f() int { // return me.m()+1000 return me.My.m() + 1000 } func (me *A) m() int { return me.a * me.a } type B struct { A b int } func (me *B) g() int { return me.My.m() + 2000 } func (me *B) m() int { return me.a * me.a * me.a } type VirtA interface { f() int m() int } type VirtB interface { VirtA g() int } func main() { aa := &A{nil, 2} aa.My = aa bb := &B{A{nil, 2}, 3} bb.My = bb Printf("hello, world\n") Printf("aa.f %d\n", aa.f()) Printf("aa.m %d\n", aa.m()) Printf("bb.f %d\n", bb.f()) Printf("bb.m %d\n", bb.m()) } @ 1.1 log @/dev/null @ text @d2 2 a3 1 import "fmt" d6 1 a6 1 My VirtA d8 1 a8 1 a int d11 3 a13 3 func (me*A) f() int { // return me.m()+1000 return me.My.m()+1000 d16 2 a17 2 func (me*A) m() int { return me.a*me.a d25 2 a26 2 func (me*B) g() int { return me.My.m()+2000 d29 2 a30 2 func (me*B) m() int { return me.a*me.a*me.a d34 2 a35 2 f() int m() int d37 1 a37 1 d39 2 a40 3 f() int g() int m() int a41 2 d44 2 a45 2 aa := &A{nil, 2}; aa.My = aa d47 2 a48 2 bb := &B{A{nil, 2}, 3}; bb.My = bb d50 3 a52 3 fmt.Printf("hello, world\n") fmt.Printf("aa.f %d\n", aa.f()) fmt.Printf("aa.m %d\n", aa.m()) d54 2 a55 2 fmt.Printf("bb.f %d\n", bb.f()) fmt.Printf("bb.m %d\n", bb.m()) @