| // 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 |
| } |
| } |