GO——學習筆記(八)

上篇:GO——學習筆記(七)

下篇:GO——學習筆記(九)

參考:

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.6.md

示例代碼——go_7

https://github.com/jiutianbian/golang-learning/blob/master/go_7/main.go

interface

interface基本定義

各個編程語言關(guān)于接口的定義:接口相當于是一份契約煌集,它規(guī)定了一個對象所能提供的一組操作夯尽。

golang中的interface也是此作用:interface是就是一組method簽名的組合,我們可以通過interface來定義對象的一組行為困食。在golang中,假如一個對象實現(xiàn)了interface中的所有method饮亏,那么我們就說此對象實現(xiàn)了此interface温眉,通過interface我們可以讓面向?qū)ο蠛蛢?nèi)容組織實現(xiàn)非常的方便苫费。

上面說了這么多概念,我們來看下办铡,具體的interface的聲明辞做,實現(xiàn),以及作用

interface的聲明與對象實現(xiàn)interface

例如現(xiàn)在定義了一個interface叫做function寡具,它其中有兩個method秤茅,run()和stop(),那么現(xiàn)在再定義兩個不同的對象,car和bike童叠,他們都實現(xiàn)了run()和stop()方法框喳,我們就說car和bike實現(xiàn)了這個叫做function的interface,代碼如下

//聲明一個叫function的接口
type function interface {
    run()
    stop()
}

//申明三個對象 car 和 bike厦坛,hunman
type car struct {
    brand string
    price string
    speed string
    size  string
}

type bike struct {
    brand string
    price string
    speed string
}

type human struct {
    name string
    age  string
}

//car 和 bike 都實現(xiàn)了run和stop方法五垮,我們就說car和bike實現(xiàn)了function這個interface,而 human 沒有實現(xiàn)run方法杜秸,就沒有實現(xiàn)function這個interface
func (c car) run() {
    fmt.Println("我是汽車:", c.brand, c.price, c.speed, "我跑起來了")
}

func (c car) stop() {
    fmt.Println("我是汽車:", c.brand, c.price, c.speed, "我停下來了")
}

func (b bike) run() {
    fmt.Println("我是自行車:", b.brand, b.price, b.speed, "我跑起來了")
}

func (b bike) stop() {
    fmt.Println("我是自行車:", b.brand, b.price, b.speed, "我停下來了")
}

func (h human) stop() {
    fmt.Println("我是:", h.name, h.age, "我停下來了")
}

interface使用

簡單使用

如果定義個interface變量拼余,那這個變量就能夠持實現(xiàn)了這個interface的任意類型的對象。

我們通過代碼來了解亩歹,上面定義了的function這個interface匙监,和3個對象car,bike小作,human亭姥,其中car,bike實現(xiàn)了function這個interface顾稀,而human沒有达罗,我們現(xiàn)在定義一個類型為function的fc變量,fc可以持有實現(xiàn)了function這個interface方法的對象car和bike的變量,benchi和fenghaung粮揉,不能持有human變量yaoming巡李,如果持有會報錯

func main() {
    //定義一個類型為function的變量fc
    var fc function

    var benchi car
    var fenghaung bike
    //  var yaoming human

    benchi = car{"奔馳", "60萬", "140km/h", "很大"}
    fenghaung = bike{"鳳凰", "1k", "20km/h"}
    //  yaoming = human{"姚明", "40"}

    //fc能夠持有實現(xiàn)了function這個interface方法的對象car和bike的變量,benchi和fenghaung扶认,不能持有human侨拦,如果持有會報錯
    fc = benchi
    fc.run()
    fc.stop()

    fc = fenghaung
    fc.run()
    fc.stop()

    //  fc = yaoming
    //  yaoming.stop()
}
空interface

如果我們定義了一個空的interface,由于interface里面不包含任何的method辐宾,所以任意類型都實現(xiàn)了此interface狱从,所以空的interface就能夠持有任意類型的變量值,代碼如下

type nullInterface interface{}

func testNullInterface() {
    var jiaobaba nullInterface

    var age int
    var name string
    var yaoming human

    name = "易建聯(lián)"
    age = 15
    yaoming = human{"姚明", "40"}

    //jiaobaba這個空的interface變量能夠持有任意類型
    jiaobaba = name
    fmt.Println(jiaobaba)

    jiaobaba = age
    fmt.Println(jiaobaba)

    jiaobaba = yaoming
    fmt.Println(jiaobaba)

}
interface函數(shù)參數(shù)

既然interface變量能夠持有實現(xiàn)了此interface方法的的變量叠纹,那么我就可以定義函數(shù)參數(shù)為interface來接受不同類型的參數(shù)季研,代碼如下:

// function這個interface作為參數(shù),可以接受實現(xiàn)了他的對象car和bike的變量
func showYourFunction(fc function) {
    fc.run()
    fc.stop()
}

func testParamInterface() {
    benchi := car{"奔馳", "60萬", "140km/h", "很大"}
    fenghaung := bike{"鳳凰", "1k", "20km/h"}

    showYourFunction(benchi)
    showYourFunction(fenghaung)
}
如何判斷interface變量存儲的具體類型

Go語言里面有一個語法誉察,Comma-ok斷言与涡,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值持偏,ok是一個bool類型递沪,element是interface變量,T是斷言的類型综液,代碼如下

type nullInterface interface{}

func showInterfaceType(nl nullInterface) {
    value, ok := nl.(int)

    fmt.Println("value:", value, "ok", ok)
    //打印 value: 0 ok: false  value: 1 ok: true
}

func testCommaInterface() {
    showInterfaceType("1")
    showInterfaceType(1)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末款慨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谬莹,更是在濱河造成了極大的恐慌檩奠,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件附帽,死亡現(xiàn)場離奇詭異埠戳,居然都是意外死亡,警方通過查閱死者的電腦和手機蕉扮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門整胃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喳钟,你說我怎么就攤上這事屁使。” “怎么了奔则?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵蛮寂,是天一觀的道長。 經(jīng)常有香客問我易茬,道長酬蹋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮范抓,結(jié)果婚禮上骄恶,老公的妹妹穿的比我還像新娘。我一直安慰自己匕垫,他們只是感情好僧鲁,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著年缎,像睡著了一般悔捶。 火紅的嫁衣襯著肌膚如雪铃慷。 梳的紋絲不亂的頭發(fā)上单芜,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音犁柜,去河邊找鬼洲鸠。 笑死,一個胖子當著我的面吹牛馋缅,可吹牛的內(nèi)容都是我干的扒腕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼萤悴,長吁一口氣:“原來是場噩夢啊……” “哼瘾腰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起覆履,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蹋盆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硝全,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栖雾,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年伟众,在試婚紗的時候發(fā)現(xiàn)自己被綠了析藕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡凳厢,死狀恐怖账胧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情先紫,我是刑警寧澤找爱,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站泡孩,受9級特大地震影響车摄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一吮播、第九天 我趴在偏房一處隱蔽的房頂上張望变屁。 院中可真熱鬧,春花似錦意狠、人聲如沸粟关。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷板。三九已至,卻和暖如春院塞,著一層夾襖步出監(jiān)牢的瞬間遮晚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工拦止, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留县遣,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓汹族,卻偏偏與公主長得像萧求,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子顶瞒,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法夸政,類相關(guān)的語法,內(nèi)部類的語法榴徐,繼承相關(guān)的語法守问,異常的語法,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • fmt格式化字符串 格式:%[旗標][寬度][.精度][arg索引]動詞旗標有以下幾種:+: 對于數(shù)值類型總是輸出...
    皮皮v閱讀 1,089評論 0 3
  • 一箕速、數(shù)組 1酪碘、數(shù)組定義 數(shù)組就是一個鍵值對組成的語言結(jié)構(gòu),鍵類似于酒店的房間號盐茎,值類似于酒店房間里存儲的東西兴垦。 $...
    空谷悠閱讀 804評論 4 11
  • 以下文章就是警醒你的…轉(zhuǎn)載自知乎! 運動的同時必須要對胸器做好十二分的愛好常柄。 1.為什么要選專業(yè)的sport br...
    姚小白少校閱讀 1,341評論 0 0