一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Golang 入門系列(四)Golang中的interface,一看就明白

 F2967527 2020-03-28

前面講了很多Go 語言的基礎(chǔ)知識,包括go環(huán)境的安裝,go語言的語法等,感興趣的朋友可以先看看之前的文章。今天今天要來說一說Golang里面非?;A(chǔ)卻有非常重要的特性:Interface接口。

Golang的語法和java和C#相差還是挺大的,可以說Golang是面向過程的語言,Jave 是面向?qū)ο蟮?。但是如果Golang想要使用面向?qū)ο蟮乃枷雭黹_發(fā)系統(tǒng),該怎么設(shè)計架構(gòu)呢?這就要用到Interface接口。下面就來講講如何理解interface接口。

1. 什么是interface接口

interface 是GO語言的基礎(chǔ)特性之一??梢岳斫鉃橐环N類型的規(guī)范或者約定。它跟java,C# 不太一樣,不需要顯示說明實現(xiàn)了某個接口,它沒有繼承或子類或“implements”關(guān)鍵字,只是通過約定的形式,隱式的實現(xiàn)interface 中的方法即可。因此,Golang 中的 interface 讓編碼更靈活、易擴展。

如何理解go 語言中的interface ? 只需記住以下三點即可:

1. interface 是方法聲明的集合2. 任何類型的對象實現(xiàn)了在interface 接口中聲明的全部方法,則表明該類型實現(xiàn)了該接口。3. interface 可以作為一種數(shù)據(jù)類型,實現(xiàn)了該接口的任何對象都可以給對應(yīng)的接口類型變量賦值。

注意:   

a. interface 可以被任意對象實現(xiàn),一個類型/對象也可以實現(xiàn)多個 interface   

b. 方法不能重載,如 eat() 和 eat(s string) 不能同時存在

2. 接口實現(xiàn)

先說說接口,接口我理解為一些行為的集合。似乎還是很懵x。那來看看代碼和效果再說吧:

package mainimport 'fmt'type Phone interface { call()}type NokiaPhone struct {}func (nokiaPhone NokiaPhone) call() { fmt.Println('I am Nokia, I can call you!')}type ApplePhone struct {}func (iPhone ApplePhone) call() { fmt.Println('I am Apple Phone, I can call you!')}func main() { var phone Phone phone = new(NokiaPhone) phone.call() phone = new(ApplePhone) phone.call()}

3. interface 查詢

如果接口A實現(xiàn)了接口B中所有方法,那么A可以轉(zhuǎn)化為B接口。

 if varName2, ok := varName1.(interface2|typeName); ok {    //此時 varName2 的類型由 interface1 轉(zhuǎn)為 interface2,或者 varName1 不是 typeName 類型的變量  } else {    //不能轉(zhuǎn)換 interface,或者 varName1 不是 typeName 類型的變量  }

4. interface{} 類型

interface{} 類型沒有聲明任何一個方法,俗稱空接口。interface{} 在我們需要存儲任意類型的數(shù)值的時候相當(dāng)有用,有點類似于C語言的void*類型。

package mainimport ( 'fmt')func PrintAll(vals []interface{}) { for _, val := range vals { fmt.Println(val) }}func main() { names := []string{'stanley', 'david', 'oscar'} vals := make([]interface{}, len(names)) for i, v := range names { vals[i] = v } PrintAll(vals)}

然而,需要注意的是,[]T不能直接賦值給[]interface{}

t := []int{1, 2, 3, 4}var s []interface{} = t

編譯時會輸出下面的錯誤:

cannot use t (type []int) as type []interface {} in assignment

最后

  以上,對Go 語言中的接口特性做了一個簡單的介紹。我覺得對于go語言來說,設(shè)計最精妙的應(yīng)該是interface了,它是Golang最重要的特性之一,感興趣的可以好好研究研究。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产91人妻精品一区二区三区| 在线观看免费视频你懂的| 人妻偷人精品一区二区三区不卡 | 亚洲国产精品国自产拍社区| 日韩中文字幕在线不卡一区| 人体偷拍一区二区三区| 免费观看日韩一级黄色大片| 成人日韩在线播放视频| 国产精品免费自拍视频| 日本加勒比不卡二三四区| 免费啪视频免费欧美亚洲| 国产91人妻精品一区二区三区 | 国产精品色热综合在线| 中文字幕乱子论一区二区三区 | 久久久免费精品人妻一区二区三区| 欧美日韩亚洲精品在线观看| 美女被啪的视频在线观看| 欧美视频在线观看一区| 女人精品内射国产99| 男女激情视频在线免费观看| 人妻内射精品一区二区| 久久热在线免费视频精品| 日韩18一区二区三区| 中文字幕高清免费日韩视频| 99国产一区在线播放| 视频在线观看色一区二区| 国产原创中文av在线播放 | 亚洲a级一区二区不卡| 国产色偷丝袜麻豆亚洲| 亚洲精品福利视频在线观看| 国产欧美韩日一区二区三区| 日韩精品视频免费观看| 久久精品国产99精品亚洲| 亚洲一级在线免费观看| 91久久国产福利自产拍| 亚洲天堂男人在线观看| 成人免费视频免费观看| 好东西一起分享老鸭窝| 麻豆视传媒短视频在线看| 日韩一区欧美二区国产| 欧美色婷婷综合狠狠爱|