// 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()
}
大道至简

浙公网安备 33010602011771号