// $G $D/$F.go && $L $F.$A && ./$A.out | |
// Copyright 2009 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package main | |
type Iputs interface { | |
puts (s string); | |
} | |
// --------- | |
type Print struct { | |
whoami int; | |
put Iputs; | |
} | |
func (p *Print) dop() { | |
print(" print ", p.whoami); | |
p.put.puts("abc"); | |
} | |
// --------- | |
type Bio struct { | |
whoami int; | |
put Iputs; | |
} | |
func (b *Bio) puts(s string) { | |
print(" bio ", b.whoami); | |
b.put.puts(s); | |
} | |
// --------- | |
type File struct { | |
whoami int; | |
put Iputs; | |
} | |
func (f *File) puts(s string) { | |
print(" file ", f.whoami, " -- ", s); | |
} | |
func | |
main() { | |
p := new(Print); | |
b := new(Bio); | |
f := new(File); | |
p.whoami = 1; | |
p.put = b; | |
b.whoami = 2; | |
b.put = f; | |
f.whoami = 3; | |
p.dop(); | |
print("\n"); | |
} |