一篇文章帶你瞭解 Go 語言基礎之接口(下篇)

前言

Hey,大家好呀,我是碼農, 星期八,上次咱們說的接口呀,還是沒說完,還剩下了一些,一篇文章帶你瞭解 Go 語言基礎之接口(上篇),下面就來看看叭!!

空接口含義

本篇介紹的就是存儲類接口,存儲接是我的命名,其實人家就叫空接口

空接口的作用就是可以存儲任何數據

同理,空接口沒有定義任何方法,也就是說任何接口都實現了空接口,所以空接口才能存任意數據

空接口

空接口示例代碼

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 語言的接口是全部都講完了。

接口主要分爲行爲接口存儲接口

如果在操作過程中有任何問題,記得下面留言,我們看到會第一時間解決問題。

加油!!!我是碼農星期八,如果覺得還不錯,記得動手點贊一下哈。感謝你的觀看。

Go 語言進階學習 該公衆號專注於分享 Go 語言相關的技術文章、工具資源、學習視頻、學習資料、送書活動等,您的關注是我們的奮鬥源動力~~~ 關注我們,您收穫的不只是知識,還有經驗與人脈!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/LZUyEIadB9TmAFwkPA-f9Q