日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

作者:Jeff的技術(shù)棧 ? 更新時(shí)間: 2022-06-15 編程語言

類型查詢

我們知道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)
		}

	}
}

原文鏈接:https://www.cnblogs.com/guyouyin123/p/13877734.html

欄目分類
最近更新