接口為什么要特意的羅列出來呢?
- 因為go和傳統(tǒng)的面向?qū)ο蟮木幊陶Z言不太一樣,沒有什么類和繼承的概念.通過接口來實現(xiàn)面向?qū)ο蟆?/strong>
- 而go的類也就是結(jié)構(gòu)體
- 所以索性就放在一起講了
- interface(接口)是golang最重要的特性之一,Interface類型可以定義一組方法,但是這些不需要實現(xiàn)。
請注意:此處限定是一組方法,既然是方法,就不能是變量。
而且是一組,表明可以有多個方法。
type i struct {
n1 int
n2 int
}
//如果一個struct嵌套了另一個匿名結(jié)構(gòu)體,那么這個結(jié)構(gòu)可以直接訪問匿名結(jié)構(gòu)體的方法,從而實現(xiàn)繼承
//如果一個struct嵌套了另一個【有名】的結(jié)構(gòu)體,那么這個模式叫做組合
//如果一個struct嵌套了多個匿名結(jié)構(gòu)體,那么這個結(jié)構(gòu)可以直接訪問多個匿名結(jié)構(gòu)體的方法,從而實現(xiàn)多重繼承
type jian struct {
i
}
type jia struct {
i
}
首先創(chuàng)建1個i結(jié)構(gòu)體為父結(jié)構(gòu)體,接著創(chuàng)建兩個子結(jié)構(gòu)體。
type j interface {
j() int
}
接著我們創(chuàng)建一個接口,設(shè)置接口方法,這里跟iOS的代理差不多,通常設(shè)置出來的必須要創(chuàng)建,否則會報錯
func (j *jian) j()int{
return j.n1 - j.n2
}
func (j *jia) j()int{
return j.n1 + j.n2
}
然后我們寫兩個結(jié)構(gòu)體方法,兩個方法名是相同的,這樣我們就可以借助接口實現(xiàn)多態(tài)的概念,根據(jù)傳入的對象而獲取到不同的數(shù)據(jù)。
func face(face j){
fmt.Println(face.j())
}
func main(){
j1 := jia{i{10,31}}
j2 := jian{i{81,26}}
face(&j1)
face(&j2)
}
最后補充一點
接口的本質(zhì)也是指針類型。
而空接口則就是object-c的 NSAny,swift里的Any了
可以的任意類型,但需要斷言判斷一下
斷言的方式為.(類型) 返回值和ok兩個參數(shù),可以在if用一行判斷結(jié)束。