GO 接口類(lèi)型 interface{} 小記
go 接口 應(yīng)該包含兩個(gè)內(nèi)容
一個(gè)是使用該接口的對(duì)象,一個(gè)是接口本身的定義
新手按照這個(gè)順序去理解
1.概念:接口是多個(gè)對(duì)象類(lèi)型(含接口本身)共同商議出來(lái)的一個(gè)僅包含標(biāo)準(zhǔn)化可調(diào)用的方法名的集合體(結(jié)構(gòu)體)(本身是個(gè)指針對(duì)象屬于引用類(lèi)型,關(guān)鍵字interface{}
所以即可以先通過(guò)對(duì)象已有的方法去設(shè)計(jì)接口,也可以先設(shè)計(jì)好接口再由對(duì)象去實(shí)現(xiàn)對(duì)應(yīng)的方法體
3.這些參與商議(或者后續(xù)新來(lái))的對(duì)象如果要實(shí)現(xiàn)(使用)這個(gè)接口,則必須實(shí)現(xiàn)這個(gè)接口包含的所有方法名對(duì)應(yīng)的函數(shù)體(含返回值類(lèi)型)
4.定義一個(gè)屬于自己的接口類(lèi)
使用type xxx interface{? ? ? ? ? ? ? ? //(go里面type類(lèi)似于其他語(yǔ)言的class)
a()[...type] ???????????????????????????????????? //...type指定該動(dòng)作返回的數(shù)據(jù)類(lèi)型
b()[...type]
c()[...type]
...
}
?得到一個(gè)名為xxx的接口類(lèi),通常是為引用或者繼承做準(zhǔn)備
5.直接聲明一個(gè)自定義接口的實(shí)例
使用var yyy interface{ //或者直接 var yyy xxx
a()[...type] //...type指定該動(dòng)作返回的數(shù)據(jù)類(lèi)型
b()[...type]
c()[...type]
...
}
得到一個(gè)名為yyy的接口實(shí)例,也是最終要用的
1,在載入滿(mǎn)足該接口規(guī)范的對(duì)象(類(lèi)型)之前,不能直接使用該接口的動(dòng)作名(否則報(bào)錯(cuò))
3.一個(gè)對(duì)象(類(lèi)型)如果實(shí)現(xiàn)了一個(gè)接口中所有動(dòng)作名對(duì)應(yīng)的動(dòng)方法,就稱(chēng)該對(duì)象(類(lèi)型)滿(mǎn)足該接口的規(guī)范,可以使用該接口
4.不包含動(dòng)作名的接口稱(chēng)為空接口,可以接受任意類(lèi)型的對(duì)象,但同樣的無(wú)法調(diào)用該對(duì)象的方法
5,接口的的繼承
可以通過(guò)type b interface{
xxx //上面定義的xxx接口類(lèi),這里注意,不能用yyy,因?yàn)樗菍?shí)例,不是類(lèi)
d()[...type] //...type指定該動(dòng)作返回的數(shù)據(jù)類(lèi)型
e()[...type]
f()[...type]]
...
}
來(lái)引用或者繼承已有的接口
6.不同名的接口實(shí)例或接口類(lèi)允許有同樣的方法名,但是在同一個(gè)接口實(shí)例或者接口類(lèi)內(nèi)禁止有相同的方法名 尤其是在引用或者繼承這些操作里