// interface package main import ( "fmt" ) //定义一个接口,接口名字Inter,接口的方法集有2个方法 type Inter interface { //声明方法 Ping() Pang() } //方法的定义 //Ping方法的接收者(适用对象)是St类型 func (St) Ping() { fmt.Println("ping") } //Pang方法的接收者(适用对象)是*St类型 func (*St) Pang() { fmt.Println("pang") } //定义一个接口,接口名字Anter,接口嵌套了Inter接口,另外还包括一个方法String type Anter interface { Inter String() } type Str string // 定义String方法,接收者是string func (Str) String() { fmt.Println("String method") } //定义一个struct,名字是St,里面只有1个元素string type St struct { Name string } func main() { fmt.Println("Hello World!") //st是St类型,并做了初始化 st := &St{"andes"} // 变量i是接口类型,并做了初始化,初始化为st var i interface{} = st /*接口断言,Inter是接口类型名, i绑定的实例类型st满足接口类型Inter, 那么o的类型就是Inter,o就是i的副本*/ o := i.(Inter) o.Ping() o.Pang() /*接口断言,*St是具体类型名,i绑定的实例类型st就是*St类型, 所以赋值结果s的类型就是*St,s结果是st的副本*/ s := i.(*St) fmt.Println(s.Name) // /*接口断言, Anter是接口类型,i绑定的实例类型st不满足接口类型Anter, // 此时会出异常*/ // p := i.(Anter) // p.Ping() // p.Pang() }