go基礎_接口斷言
阿新 • • 發佈:2019-03-29
clas println hello () 結果 pack div 異常 world!
// 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() }
go基礎_接口斷言