好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Go 語言中的空接口(推薦)

Go 語言中的空接口(推薦)

熱門標簽:濮陽自動外呼系統代理 賺地圖標注的錢犯法嗎 地圖標注測試 福州鐵通自動外呼系統 澳門防封電銷卡 智能電銷機器人營銷 烏魯木齊人工電銷機器人系統 長沙ai機器人電銷 廣東語音外呼系統供應商

在自己學習 Golang 的這段時間里,我寫了詳細的學習筆記放在我的個人微信公眾號 《Go編程時光》,對于 Go 語言,我也算是個初學者,因此寫的東西應該會比較適合剛接觸的同學,如果你也是剛學習 Go 語言,不防關注一下,一起學習,一起成長。

我的在線博客:http://golang.iswbm.com
我的 Github:github.com/iswbm/GolangCodingTime

1. 什么是空接口?

空接口是特殊形式的接口類型,普通的接口都有方法,而空接口沒有定義任何方法口,也因此,我們可以說所有類型都至少實現了空接口。

type empty_iface interface {
}

每一個接口都包含兩個屬性,一個是值,一個是類型。

而對于空接口來說,這兩者都是 nil,可以使用 fmt 來驗證一下

package main

import (
	"fmt"
)

func main() {
	var i interface{}
	fmt.Printf("type: %T, value: %v", i, i)
}

輸出如下

type: nil>, value: nil>

2. 如何使用空接口?

第一,通常我們會直接使用 interface{} 作為類型聲明一個實例,而這個實例可以承載任意類型的值。

package main

import (
	"fmt"
)

func main() {
	// 聲明一個空接口實例
	var i interface{}

	// 存 int 沒有問題
	i = 1
	fmt.Println(i)

	// 存字符串也沒有問題
	i = "hello"
	fmt.Println(i)

	// 存布爾值也沒有問題
	i = false
	fmt.Println(i)
}

第二,如果想讓你的函數可以接收任意類型的值 ,也可以使用空接口

接收一個任意類型的值 示例

package main

import (
	"fmt"
)

func myfunc(iface interface{}){
	fmt.Println(iface)
}

func main() {
	a := 10
	b := "hello"
	c := true

	myfunc(a)
	myfunc(b)
	myfunc(c)
}

接收任意個任意類型的值 示例

package main

import (
	"fmt"
)

func myfunc(ifaces ...interface{}){
	for _,iface := range ifaces{
		fmt.Println(iface)
	}
}

func main() {
	a := 10
	b := "hello"
	c := true

	myfunc(a, b, c)
}

第三,你也定義一個可以接收任意類型的 array、slice、map、strcut,例如這邊定義一個切片

package main

import "fmt"

func main() {
 any := make([]interface{}, 5)
 any[0] = 11
 any[1] = "hello world"
 any[2] = []int{11, 22, 33, 44}
 for _, value := range any {
 fmt.Println(value)
 }
}

3. 空接口幾個要注意的坑

坑1:空接口可以承載任意值,但不代表任意類型就可以承接空接口類型的值

從實現的角度看,任何類型的值都滿足空接口。因此空接口類型可以保存任何值,也可以從空接口中取出原值。

但要是你把一個空接口類型的對象,再賦值給一個固定類型(比如 int, string等類型)的對象賦值,是會報錯的。

package main

func main() {
	// 聲明a變量, 類型int, 初始值為1
	var a int = 1

	// 聲明i變量, 類型為interface{}, 初始值為a, 此時i的值變為1
	var i interface{} = a

	// 聲明b變量, 嘗試賦值i
	var b int = i
}

這個報錯,它就好比可以放進行禮箱的東西,肯定能放到集裝箱里,但是反過來,能放到集裝箱的東西就不一定能放到行禮箱了,在 Go 里就直接禁止了這種反向操作。(聲明:底層原理肯定還另有其因,但對于新手來說,這樣解釋也許會容易理解一些。)

.\main.go:11:6: cannot use i (type interface {}) as type int in assignment: need type assertion

坑2::當空接口承載數組和切片后,該對象無法再進行切片

package main

import "fmt"

func main() {
	sli := []int{2, 3, 5, 7, 11, 13}

	var i interface{}
	i = sli

	g := i[1:3]
	fmt.Println(g)
}

執行會報錯。

.\main.go:11:8: cannot slice i (type interface {})

坑3:當你使用空接口來接收任意類型的參數時,它的靜態類型是 interface{},但動態類型(是 int,string 還是其他類型)我們并不知道,因此需要使用類型斷言。

package main

import (
	"fmt"
)

func myfunc(i interface{}) {

	switch i.(type) {
	case int:
		fmt.Println("參數的類型是 int")
	case string:
		fmt.Println("參數的類型是 string")
	}
}

func main() {
	a := 10
	b := "hello"
	myfunc(a)
	myfunc(b)
}

輸出如下

參數的類型是 int
參數的類型是 string

總結

到此這篇關于Go 語言中的空接口的文章就介紹到這了,更多相關go 語言空接口內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • django API 中接口的互相調用實例
  • Django 自動生成api接口文檔教程
  • python Django編寫接口并用Jmeter測試的方法
  • Django如何開發簡單的查詢接口詳解
  • 使用Django開發簡單接口實現文章增刪改查
  • golang中interface接口的深度解析
  • 淺談Go語言中的結構體struct & 接口Interface & 反射
  • Go語言接口定義與用法示例
  • 分析Go語言接口的設計原則

標簽:德州 貴陽 阿克蘇 西雙版納 廣西 調研邀請 太原 慶陽

巨人網絡通訊聲明:本文標題《Go 語言中的空接口(推薦)》,本文關鍵詞  語言,中的,空,接口,推薦,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go 語言中的空接口(推薦)》相關的同類信息!
  • 本頁收集關于Go 語言中的空接口(推薦)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 男女性动态激烈动全过程| 日本性图片| 被丈夫的上司侵犯的第七天| 丰满熟妇区毛片蜜桃美女图片| 国产又黄又潮娇喘视频免费| 中文字幕不卡在线观看| 公与媳系列大全| 男生桶女生下面视频| 就算是唱歌的大姐姐也想做| 野原琳被扒开腿猛?| 好爽?好紧?宝贝叫大声欧美| 色姝姝影院| 阳江市| 日本精品欧洲www| 美味的双性室友(H)| 国产成人精品3p人妻网站| yin男乱女小说在线全文阅读| 柔佳的乳峰上向下蜿蜒而过| 内衣办公室在线播放| www羞羞动漫网在线观看| 徐若瑄早年露全乳| 男男大肚孕play高H孕期| 国产一区二区欧美一区| 四房激情网| 胸的样子| 免费人成又黄又爽又色| 国产在线成人精品| 白丝美女被c| 日本wv一本一道久久香蕉| 亚洲 自拍 另类 动图 gif| 欧美体内?精ggggg| 国产香港三级理论在线| 无人视频在线观看高清免费完整版 | 免费三级电影| 快穿之诱受肉h校园| 国产精品一夜| 国产午夜Av无码无片久蜜| 国产一级二级三级毛片| 亚洲天天干| 黄色小说肉| 制服亚洲欧美中文字幕|