| // $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"); |
| } |