go快速學(xué)習(xí)_結(jié)構(gòu)體-接口-結(jié)構(gòu)體函數(shù)

接口為什么要特意的羅列出來呢?

  • 因為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é)束。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容