// $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 export type S struct { a,b int; } export type I1 interface { f ()int; } export 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); } }