type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ... }
注:ide
1. interface中不能包含變量spa
2. 一個類型不用顯式去定義實現某個接口,只要包含全部interface中定義的方法,這個類型就默認實現了這個接口指針
3. 多個類型能夠實現相同的接口code
4. 一個類型實現接口的同時,還能夠定義屬於本身的方法blog
5. 一個類型能夠實現多個接口接口
type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool } type Lock interface { Lock() Unlock() } type File interface { ReadWrite Lock Close() }
這樣File會包含ReadWrite和Lock中全部的方法it
v := varI.(T) //varI must be an interface variable.
實例class
package lemon type Shaper interface { Area() float32 } type Square struct { Side float32 } func (sq *Square) Area() float32 { return sq.Side * sq.Side } //use in main func. func showInterfaceUsage() { sq1 := new(lemon.Square) sq1.Side = 5 var areaIntf lemon.Shaper areaIntf = sq1 if v, ok := areaIntf.(*lemon.Square); ok { fmt.Printf("The square has area: %f\n", v.Area()) } }
注意:方法的定義中傳的type爲指針,判斷時也要傳指針。變量
switch areaIntf.(type) { case *lemon.Square: fmt.Printf("The square area is %f\n", areaIntf.Area()) default: fmt.Printf("The default type") }
也能夠直接經過方法interface.(type)來得到接口的類型float
...待續