| // run | |
| // 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. | |
| // Test interface assignment. | |
| package main | |
| type Iputs interface { | |
| puts (s string) string; | |
| } | |
| // --------- | |
| type Print struct { | |
| whoami int; | |
| put Iputs; | |
| } | |
| func (p *Print) dop() string { | |
| r := " print " + string(p.whoami + '0') | |
| return r + p.put.puts("abc"); | |
| } | |
| // --------- | |
| type Bio struct { | |
| whoami int; | |
| put Iputs; | |
| } | |
| func (b *Bio) puts(s string) string { | |
| r := " bio " + string(b.whoami + '0') | |
| return r + b.put.puts(s); | |
| } | |
| // --------- | |
| type File struct { | |
| whoami int; | |
| put Iputs; | |
| } | |
| func (f *File) puts(s string) string { | |
| return " file " + string(f.whoami + '0') + " -- " + 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; | |
| r := p.dop(); | |
| expected := " print 1 bio 2 file 3 -- abc" | |
| if r != expected { | |
| panic(r + " != " + expected) | |
| } | |
| } | |