// Copyright 2013 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 p type ( A interface { a() interface { ABC1 } } B interface { b() interface { ABC2 } } C interface { c() interface { ABC3 } } AB interface { A B } BC interface { B C } ABC1 interface { A B C } ABC2 interface { AB C } ABC3 interface { A BC } ) var ( x1 ABC1 x2 ABC2 x3 ABC3 ) func _() { // all types have the same method set x1 = x2 x2 = x1 x1 = x3 x3 = x1 x2 = x3 x3 = x2 // all methods return the same type again x1 = x1.a() x1 = x1.b() x1 = x1.c() x2 = x2.a() x2 = x2.b() x2 = x2.c() x3 = x3.a() x3 = x3.b() x3 = x3.c() }