看【Go語言實(shí)戰(zhàn)】這本書第二遍了,看第一遍的時候只是留下個印象,為了加深記憶以及方便回顧,把自己的理解寫出來,僅供參考,Go Go Go,開始
創(chuàng)新互聯(lián)建站專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、臺州網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為臺州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
接口是用來定義行為的類型。這些被定義的行為不由接口直接實(shí)現(xiàn),而是通過方法由用戶 定義的類型實(shí)現(xiàn)。如果用戶定義的類型實(shí)現(xiàn)了某個接口類型聲明的一組方法,那么這個用戶定 義的類型的值就可以賦給這個接口類型的值。這個賦值會把用戶定義的類型的值存入接口類型 的值。
1、如果參數(shù)類型是指針,那么在調(diào)用的時候也必須傳遞指針地址,因?yàn)榫幾g器不是總能自動獲取一個值的地址
2、如果參數(shù)類型是值,那調(diào)用的時候傳值或者指針都可以,因?yàn)橥ㄟ^指針可以獲取到對應(yīng)的值
1、定義一個接口,接口中定義一個方法,所有想要實(shí)現(xiàn)該接口的類型,必須先實(shí)現(xiàn)接口中的方法
2、定義一個類型,并為該類型以接收者方式實(shí)現(xiàn)【步驟1】中的接口方法
3、聲明一個多態(tài)方法,接收的參數(shù)類型為【步驟1】中定義的接口類型
4、調(diào)用該多態(tài)方法,并把【步驟2】中定義的類型作為參數(shù)傳遞給【步驟3】中聲明的多態(tài)方法,由多態(tài)方法來調(diào)用接口方法
接口像是一個公司里面的領(lǐng)導(dǎo),他會定義一些通用規(guī)范,只設(shè)計規(guī)范,而不實(shí)現(xiàn)規(guī)范。
go語言的接口,是一種新的類型定義,它把所有的具有共性的方法定義在一起,任何其他類型只要實(shí)現(xiàn)了這些方法就是實(shí)現(xiàn)了這個接口。
語法格式和方法非常類似。
在接口定義中定義,若干個空方法。這些方法都具有通用性。
下面我定義一個USB接口,有讀read和寫write兩個方法,再定義一個電腦Computer和一個手機(jī)Mobile來實(shí)現(xiàn)這個接口。
USB接口
Computer結(jié)構(gòu)體
Mobile結(jié)構(gòu)體
Computer實(shí)現(xiàn)USB接口方法
Mobile實(shí)現(xiàn)USB接口方法
測試
運(yùn)行結(jié)果
下面我們定義一個OpenClose接口,里面有兩個方法open和close,定義個Door結(jié)構(gòu)體,實(shí)現(xiàn)其中一個方法。
大家好,我是謝偉,是一名程序員。
下面的學(xué)習(xí)是一個系列,力求從初學(xué)者的角度學(xué)會go 語言,達(dá)到中級程序員水平。
這一系列是我的輸出總結(jié),同時我還推出了視頻版。正在制作過程。
為寫出這些文章,我閱讀了網(wǎng)上諸多熱門的教程和紙質(zhì)書籍。內(nèi)容的實(shí)質(zhì)都是那些,要區(qū)分出差異的話,只能表現(xiàn)在具體實(shí)例層面。所以,實(shí)例我會選取自己在工作中的項目實(shí)例抽取出來。希望對大家有所幫助。
我們已經(jīng)研究了:
本節(jié)的主題是:接口
接口是 golang 中最值得強(qiáng)調(diào)的特性。它讓面向?qū)ο螅瑑?nèi)容組織實(shí)現(xiàn)非常的方便。
接口在 go 語言中是一系列方法的集合,原則上方法可以有很多個,但建議4個左右。
上文中定義了一個 httpClient 的接口,指定了這個接口可以干這些活: Get、Post、Put、Delete
上文中指定了 httpClient 接口,指定了這個接口需要干的活是: Get、Post、Put、Delete , 具體的實(shí)現(xiàn)需要靠其他結(jié)構(gòu)體來實(shí)現(xiàn)。
一個結(jié)構(gòu)體實(shí)現(xiàn)了接口要求的所有的方法(方法的參數(shù)和返回值一致),那么就說這個結(jié)構(gòu)體實(shí)現(xiàn)了這個接口
上文中的使用: httpClient 屏蔽了 httpImpl 的內(nèi)部細(xì)節(jié),而依然可以使用 Get 方法,去完成任務(wù)。
當(dāng)然接口可以被諸多結(jié)構(gòu)體實(shí)現(xiàn),只需存在接口定義的幾種方法即可。
接口和結(jié)構(gòu)體的定義很相似,也可以完成嵌入接口的功能,嵌入的匿名的接口,可以自動的具備被嵌入的接口的方法。
結(jié)構(gòu)體實(shí)現(xiàn) String 方法即可實(shí)現(xiàn)結(jié)構(gòu)化輸出結(jié)構(gòu)體。
實(shí)現(xiàn)Error 方法即可自定義錯誤類型。
這幾個讀寫接口在好些庫中實(shí)現(xiàn)了,后續(xù)我們再討論。
Any 類型
空接口在 go 里,可以當(dāng)成任意類型,意味著,比如你的函數(shù)或者方法不知道傳入的參數(shù)的類型,可以直接定義為 interface{}
類型斷言
類型斷言的使用場景是:接口類型的變量可以包含任何類型的值。如何判斷變量的真實(shí)類型?
比如解析一個不知道字段類型的 json, 常常需要使用到類型斷言。
可以使用:
ok...idiom
varInterface.(T), varInterface 必須是接口、T 則是具體的實(shí)現(xiàn)接口的結(jié)構(gòu)體
switch ..case...
.(type) 只在 switch 語句里才能使用。
以上就是接口的全部內(nèi)容,接口是go 中最特別的特性。借助 接口, go 實(shí)現(xiàn)面向?qū)ο笾械睦^承和多態(tài)。
接口是方法的集合,只定義具體要干什么,而怎么干,則由其他的結(jié)構(gòu)體的方法實(shí)現(xiàn)。這樣不同的結(jié)構(gòu)體的方法的具體處理不同,實(shí)現(xiàn)的接口的功能就不一樣。
盡管如此,接口并不意味著可以隨意濫用。我們最好是根據(jù)面向?qū)ο蟮目陀^實(shí)體,抽象出接口和方法。
本節(jié)完,再會。
是的,Go語言需要使用service接口來實(shí)現(xiàn)服務(wù)器端的功能,例如處理HTTP請求、接收和發(fā)送數(shù)據(jù)等等。是的,Go語言需要使用service接口來實(shí)現(xiàn)服務(wù)器端的功能,例如處理HTTP請求、接收和發(fā)送數(shù)據(jù)等等。