|  | // 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 a | 
|  |  | 
|  | type I interface { | 
|  | F() | 
|  | } | 
|  |  | 
|  | type foo1 []byte | 
|  | type foo2 []rune | 
|  | type foo3 []uint8 | 
|  | type foo4 []int32 | 
|  | type foo5 string | 
|  | type foo6 string | 
|  | type foo7 string | 
|  | type foo8 string | 
|  | type foo9 string | 
|  |  | 
|  | func (f foo1) F() { return } | 
|  | func (f foo2) F() { return } | 
|  | func (f foo3) F() { return } | 
|  | func (f foo4) F() { return } | 
|  | func (f foo5) F() { return } | 
|  | func (f foo6) F() { return } | 
|  | func (f foo7) F() { return } | 
|  | func (f foo8) F() { return } | 
|  | func (f foo9) F() { return } | 
|  |  | 
|  | func Test1(s string) I  { return foo1(s) } | 
|  | func Test2(s string) I  { return foo2(s) } | 
|  | func Test3(s string) I  { return foo3(s) } | 
|  | func Test4(s string) I  { return foo4(s) } | 
|  | func Test5(s []byte) I  { return foo5(s) } | 
|  | func Test6(s []rune) I  { return foo6(s) } | 
|  | func Test7(s []uint8) I { return foo7(s) } | 
|  | func Test8(s []int32) I { return foo8(s) } | 
|  | func Test9(s int) I     { return foo9(s) } | 
|  |  | 
|  | type bar map[int]int | 
|  |  | 
|  | func (b bar) F() { return } | 
|  |  | 
|  | func TestBar() I { return bar{1: 2} } | 
|  |  | 
|  | type baz int | 
|  |  | 
|  | func IsBaz(x interface{}) bool { _, ok := x.(baz); return ok } | 
|  |  | 
|  | type baz2 int | 
|  |  | 
|  | func IsBaz2(x interface{}) bool { | 
|  | switch x.(type) { | 
|  | case baz2: | 
|  | return true | 
|  | default: | 
|  | return false | 
|  | } | 
|  | } |