新聞中心
前言

成都創(chuàng)新互聯(lián)是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都搬家公司等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
Hey,大家好呀,我是碼農(nóng),星期八,上次咱們說(shuō)的接口呀,還是沒(méi)說(shuō)完,還剩下了一些
下面就來(lái)看看叭!!
空接口含義
本篇介紹的就是存儲(chǔ)類接口,存儲(chǔ)接是我的命名,其實(shí)人家就叫空接口。
空接口的作用就是可以存儲(chǔ)任何數(shù)據(jù)。
同理,空接口沒(méi)有定義任何方法,也就是說(shuō)任何接口都實(shí)現(xiàn)了空接口,所以空接口才能存任意數(shù)據(jù)。
空接口
空接口示例代碼
- package main
- import "fmt"
- func main() {
- //變量直接賦值為空接口
- var x interface{}
- x = 1
- x = 1.1
- x = "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)用
不知道你有沒(méi)有想過(guò),如果函數(shù)的參數(shù),也是一個(gè)空接口,那不是就可以隨便傳值了嗎?
我還用個(gè)毛靜態(tài)類型,以后都用空接口得了,嗯。。。這個(gè)按下不表,等會(huì)說(shuō)。
函數(shù)參數(shù)為空接口代碼
- package main
- import "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ù)寫(xiě),可以寫(xiě)很多很多
執(zhí)行結(jié)果
總結(jié)
到此為止,Go語(yǔ)言的接口是全部都講完了。
接口主要分為行為接口和存儲(chǔ)接口。
行為接口主要用在面向?qū)ο筮@個(gè)方向,規(guī)定父類必須有哪些動(dòng)作。
空接口時(shí)為了方便存值,可以存儲(chǔ)任意類型。
文章標(biāo)題:一篇文章帶你了解Go語(yǔ)言基礎(chǔ)之接口(下篇)
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/dphjhco.html


咨詢
建站咨詢
