|  | // 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) | 
|  | } | 
|  | } |