一篇文章帶你了解Go語(yǔ)言基礎(chǔ)之接口(下篇)
回復(fù)“Go語(yǔ)言”即可獲贈(zèng)從入門到進(jìn)階共10本電子書
潯陽(yáng)地僻無(wú)音樂(lè),終歲不聞絲竹聲。
前言
Hey,大家好呀,我是碼農(nóng),星期八,上次咱們說(shuō)的接口呀,還是沒說(shuō)完,還剩下了一些
下面就來(lái)看看叭!!
空接口含義
本篇介紹的就是存儲(chǔ)類接口,存儲(chǔ)接是我的命名,其實(shí)人家就叫空接口。
空接口的作用就是可以存儲(chǔ)任何數(shù)據(jù)。
同理,空接口沒有定義任何方法,也就是說(shuō)任何接口都實(shí)現(xiàn)了空接口,所以空接口才能存任意數(shù)據(jù)。
空接口
空接口示例代碼
package mainimport "fmt"func main() {//變量直接賦值為空接口var x interface{}x = 1x = 1.1x = "666"x = [3]int{1, 2, 3} //數(shù)組x = []int{6, 23} //切片x = map[string]string{"Name": "張三","Age": "666",}fmt.Println(x)//map中value類型為空接口var y = map[string]interface{}{"Name":"張三","Age":18,}fmt.Println(y)}
執(zhí)行結(jié)果

空接口確實(shí)是可以存儲(chǔ)任何數(shù)據(jù)的,并且是直接可以使用的。
空接口在函數(shù)中的應(yīng)用
不知道你有沒有想過(guò),如果函數(shù)的參數(shù),也是一個(gè)空接口,那不是就可以隨便傳值了嗎?
我還用個(gè)毛靜態(tài)類型,以后都用空接口得了,嗯。。。這個(gè)按下不表,等會(huì)說(shuō)。
函數(shù)參數(shù)為空接口代碼
package mainimport "fmt"func say(x interface{}) {fmt.Println(x)}func main() {say(1)say("666")say([]int{5, 1, 3})}
確實(shí)是如上述所說(shuō),函數(shù)參數(shù)為空接口類類型,的確可以傳任何數(shù)據(jù)。
但是僅限打印時(shí)可以隨便打印。
假設(shè)我想讓傳入的值+1。
func say(x interface{}) {fmt.Println(x)fmt.Println(x+1)}
報(bào)錯(cuò)信息

所以說(shuō),空接口并不是萬(wàn)能的。
類型斷言
上述函數(shù)雖然可以接收任意類型。
但是我有個(gè)需求。
如果傳入的是int類型,參數(shù)+100。
如果傳入的是字符串類型,參數(shù)+"666"。
如果傳入的是其他類型,返回不存在。
這該怎么辦呢?這就要用到斷言這個(gè)功能。
斷言語(yǔ)法
空接口.(類型)示例代碼
func say(x interface{}) {value, ok := x.(int)if ok {//如果是ok表示斷言成功,是int類型fmt.Println(value + 100)}value2, ok := x.(string)if ok {//斷言成功表示是字符串fmt.Println(value2 + "666")}}
如果說(shuō)有很多類型,斷言起來(lái)比較麻煩,這時(shí)候用switch比較好。
func say(x interface{}) {switch value := x.(type) {case int:fmt.Println(value + 10)case string:fmt.Println(value + "666")default:fmt.Println("啥都不是")}}//case可以繼續(xù)寫,可以寫很多很多
執(zhí)行結(jié)果

總結(jié)
到此為止,Go語(yǔ)言的接口是全部都講完了。
接口主要分為行為接口和存儲(chǔ)接口。
行為接口主要用在面向?qū)ο筮@個(gè)方向,規(guī)定父類必須有哪些動(dòng)作。
空接口時(shí)為了方便存值,可以存儲(chǔ)任意類型。
如果在操作過(guò)程中有任何問(wèn)題,記得下面留言,我們看到會(huì)第一時(shí)間解決問(wèn)題。
加油?。。∥沂谴a農(nóng)星期八,如果覺得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。感謝你的觀看。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
