一篇文章帶你了解Go語言基礎之接口(下篇)
前言
Hey,大家好呀,我是碼農,星期八,上次咱們說的接口呀,還是沒說完,還剩下了一些
下面就來看看叭!!
空接口含義
本篇介紹的就是存儲類接口,存儲接是我的命名,其實人家就叫空接口。
空接口的作用就是可以存儲任何數據。
同理,空接口沒有定義任何方法,也就是說任何接口都實現了空接口,所以空接口才能存任意數據。
空接口
空接口示例代碼
- package main
- import "fmt"
- func main() {
- //變量直接賦值為空接口
- var x interface{}
- x = 1
- x = 1.1
- x = "666"
- x = [3]int{1, 2, 3} //數組
- 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)
執行結果

空接口確實是可以存儲任何數據的,并且是直接可以使用的。
空接口在函數中的應用
不知道你有沒有想過,如果函數的參數,也是一個空接口,那不是就可以隨便傳值了嗎?
我還用個毛靜態類型,以后都用空接口得了,嗯。。。這個按下不表,等會說。
函數參數為空接口代碼
- package main
- import "fmt"
- func say(x interface{}) {
- fmt.Println(x)
- }
- func main() {
- say(1)
- say("666")
- say([]int{5, 1, 3})
- }
確實是如上述所說,函數參數為空接口類類型,的確可以傳任何數據。
但是僅限打印時可以隨便打印。
假設我想讓傳入的值+1。
- func say(x interface{}) {
- fmt.Println(x)
- fmt.Println(x+1)
- }
報錯信息
所以說,空接口并不是萬能的。
類型斷言
上述函數雖然可以接收任意類型。
但是我有個需求。
如果傳入的是int類型,參數+100。
如果傳入的是字符串類型,參數+"666"。
如果傳入的是其他類型,返回不存在。
這該怎么辦呢?這就要用到斷言這個功能。
斷言語法
- 空接口.(類型)
示例代碼
- 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")
- }
- }
如果說有很多類型,斷言起來比較麻煩,這時候用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可以繼續寫,可以寫很多很多
執行結果

總結
到此為止,Go語言的接口是全部都講完了。
接口主要分為行為接口和存儲接口。
行為接口主要用在面向對象這個方向,規定父類必須有哪些動作。
空接口時為了方便存值,可以存儲任意類型。