最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GO語言類型查詢類型斷言示例解析

 更新時(shí)間:2022年04月15日 09:01:14   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了GO語言類型判斷及類型斷言,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

類型查詢

我們知道interface的變量里面可以存儲(chǔ)任意類型的數(shù)值(該類型實(shí)現(xiàn)了interface)。那么我們?cè)趺捶聪蛑肋@個(gè)變量里面實(shí)際保存了的是哪個(gè)類型的對(duì)象呢?目前常用的有兩種方法:

  • comma-ok斷言
  • switch測(cè)試

1.comma-ok斷言

Go語言里面有一個(gè)語法,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值,ok是一個(gè)bool類型,element是interface變量,T是斷言的類型。

如果element里面確實(shí)存儲(chǔ)了T類型的數(shù)值,那么ok返回true,否則返回false。

var i []interface{}
i = append(i, 10, 3.14, "aaa", demo15)
for _, v := range i {
    if data, ok := v.(int); ok {
        fmt.Println("整型數(shù)據(jù):", data)
    } else if data, ok := v.(float64); ok {
        fmt.Println("浮點(diǎn)型數(shù)據(jù):", data)
    } else if data, ok := v.(string); ok {
        fmt.Println("字符串?dāng)?shù)據(jù):", data)
    } else if data, ok := v.(func()); ok {
        //函數(shù)調(diào)用
        data()
    }
}

2. switch測(cè)試

var i []interface{}
i = append(i, 10, 3.14, "aaa", demo15)
for _,data := range i{
    switch value:=data.(type) {
    case int:
        fmt.Println("整型",value)
    case float64:
        fmt.Println("浮點(diǎn)型",value)
    case string:
        fmt.Println("字符串",value)
    case func():
        fmt.Println("函數(shù)",value)
    }
}

類型斷言

if判斷

package main
import "fmt"
type Student struct {
	name string
	id   int
}
func main() {
	i := make([]interface{}, 3)
	i[0] = 1                    //int
	i[1] = "hello go"           //string
	i[2] = Student{"mike", 666} //Student
	//類型查詢,類型斷言
	//第一個(gè)返回下標(biāo),第二個(gè)返回下標(biāo)對(duì)應(yīng)的值, data分別是i[0], i[1], i[2]
	for index, data := range i {
		//第一個(gè)返回的是值,第二個(gè)返回判斷結(jié)果的真假
		if value, ok := data.(int); ok == true {
			fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value)
		} else if value, ok := data.(string); ok == true {
			fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value)
		} else if value, ok := data.(Student); ok == true {
			fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id)
		}
	}
}

Switch判斷

package main
import "fmt"
type Student struct {
	name string
	id   int
}
func main() {
	i := make([]interface{}, 3)
	i[0] = 1                    //int
	i[1] = "hello go"           //string
	i[2] = Student{"mike", 666} //Student
	//類型查詢,類型斷言
	for index, data := range i {
		switch value := data.(type) {
		case int:
			fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value)
		case string:
			fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value)
		case Student:
			fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id)
		}

	}
}

以上就是GO語言類型查詢類型斷言示例解析的詳細(xì)內(nèi)容,更多關(guān)于GO類型查詢類型斷言 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 掌握Golang中的select語句實(shí)現(xiàn)并發(fā)編程

    掌握Golang中的select語句實(shí)現(xiàn)并發(fā)編程

    Golang中的select語句用于在多個(gè)通道間選擇可讀或可寫的操作,并阻塞等待其中一個(gè)通道進(jìn)行操作??梢杂糜趯?shí)現(xiàn)超時(shí)控制、取消和中斷操作等。同時(shí),select語句支持default分支,用于在沒有任何通道可操作時(shí)執(zhí)行默認(rèn)操作
    2023-04-04
  • Golang?json?庫中的RawMessage功能原理

    Golang?json?庫中的RawMessage功能原理

    今天我們來學(xué)習(xí)一個(gè) Golang 官方 json 庫提供了一個(gè)經(jīng)典能力RawMessage,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Golang RSA生成密鑰、加密、解密、簽名與驗(yàn)簽的實(shí)現(xiàn)

    Golang RSA生成密鑰、加密、解密、簽名與驗(yàn)簽的實(shí)現(xiàn)

    RSA 是最常用的非對(duì)稱加密算法,本文主要介紹了Golang RSA生成密鑰、加密、解密、簽名與驗(yàn)簽的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 解析Go的Waitgroup和鎖的問題

    解析Go的Waitgroup和鎖的問題

    大家在學(xué)習(xí)go語言的時(shí)候,都知道go語言支持并發(fā),使用 goroutine,使用關(guān)鍵字 go 即可,接下來通過本文給大家分享Go的Waitgroup和鎖的問題,需要的朋友可以參考下
    2021-05-05
  • 詳解Go語言的context包從放棄到入門

    詳解Go語言的context包從放棄到入門

    這篇文章主要介紹了Go語言的context包從放棄到入門,本文通過實(shí)例演示給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 一文帶你了解Golang中的泛型

    一文帶你了解Golang中的泛型

    泛型是一種可以編寫?yīng)毩⒂谑褂玫奶囟愋偷拇a的方法,可以通過編寫函數(shù)或類型來使用一組類型中的任何一個(gè),下面就來和大家聊聊Golang中泛型的使用吧
    2023-07-07
  • Go語言中init函數(shù)特點(diǎn)、用途和注意事項(xiàng)詳解

    Go語言中init函數(shù)特點(diǎn)、用途和注意事項(xiàng)詳解

    go語言中有一個(gè)非常神奇的函數(shù)init,它可以在所有程序執(zhí)行開始前被執(zhí)行,并且每個(gè)package下面可以存在多個(gè)init函數(shù),這篇文章主要給大家介紹了關(guān)于Go語言中init函數(shù)特點(diǎn)、用途和注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Golang switch語句的具體使用

    Golang switch語句的具體使用

    switch 語句提供了一種簡潔的方式來執(zhí)行多路分支選擇,本文主要介紹了Golang switch語句的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Go語言中實(shí)現(xiàn)enum枚舉的方法詳解

    Go語言中實(shí)現(xiàn)enum枚舉的方法詳解

    枚舉,即?enum,可用于表示一組范圍固定的值,它能助我們寫出清晰、安全的代碼,那么你是否了解過?Go?中的枚舉呢?下面就跟隨小編一起來學(xué)習(xí)一下Go語言中實(shí)現(xiàn)enum枚舉的常用方法吧
    2024-02-02
  • 深入探討Go語言中的預(yù)防性接口為什么是不必要的

    深入探討Go語言中的預(yù)防性接口為什么是不必要的

    在Go語言中,有一種從其他語言帶來的常見模式:預(yù)防性接口,雖然這種模式在?Java?等語言中很有價(jià)值,但在Go中往往會(huì)成為反模式,本文我們就來深入探討一下原因
    2025-01-01

最新評(píng)論

平邑县| 蒙山县| 隆子县| 勃利县| 汉寿县| 资兴市| 柯坪县| 磴口县| 黔东| 北川| 铁岭县| 唐海县| 万山特区| 玉树县| 兴义市| 邓州市| 阿鲁科尔沁旗| 湘潭市| 石楼县| 宣汉县| 金山区| 噶尔县| 铜陵市| 元阳县| 靖江市| 大姚县| 扎兰屯市| 上思县| 兴隆县| 滨州市| 华安县| 屏山县| 鸡泽县| 定远县| 南溪县| 阿坝| 公主岭市| 长顺县| 大厂| 福州市| 清镇市|