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