// 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. package main type S struct { a,b int; } type I1 interface { f ()int; } type I2 interface { g() int; 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.(I2); // 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.(*S); // convert I1 to S if g != s { panic(31); } g = i2.(*S); // convert I2 to S if g != s { panic(32); } }