// Copyright 2016 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 a // F is an exported function, small enough to be inlined. // It defines a local interface with an unexported method // f, which will appear with a package-qualified method // name in the export data. func F(x interface{}) bool { _, ok := x.(interface { f() }) return ok } // Like F but with the unexported interface method f // defined via an embedded interface t. The compiler // always flattens embedded interfaces so there should // be no difference between F and G. Alas, currently // G is not inlineable (at least via export data), so // the issue is moot, here. func G(x interface{}) bool { type t0 interface { f() } _, ok := x.(interface { t0 }) return ok } // Like G but now the embedded interface is declared // at package level. This function is inlineable via // export data. The export data representation is like // for F. func H(x interface{}) bool { _, ok := x.(interface { t1 }) return ok } type t1 interface { f() }