// $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 S struct { a,b int; } type I1 interface { f ()int; } type I2 interface { g,f ()int; } func (this *S) f()int { return this.a; } func (this *S) g()int { return this.b; } func main() { var i1 I1; var i2 I2; var g *S; s := new(S); s.a = 5; s.b = 6; // call structure if s.f() != 5 { panic 11; } if s.g() != 6 { panic 12; } i1 = s; // convert S to I1 i2 = i1; // convert I1 to I2 // call interface if i1.f() != 5 { panic 21; } if i2.f() != 5 { panic 22; } if i2.g() != 6 { panic 23; } g = i1; // convert I1 to S if g != s { panic 31; } g = i2; // convert I2 to S if g != s { panic 32; } }