首頁 > 軟體

GO語言型別查詢型別斷言範例解析

2022-04-15 10:00:02

型別查詢

我們知道interface的變數裡面可以儲存任意型別的數值(該型別實現了interface)。那麼我們怎麼反向知道這個變數裡面實際儲存了的是哪個型別的物件呢?目前常用的有兩種方法:

  • comma-ok斷言
  • switch測試

1.comma-ok斷言

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

如果element裡面確實儲存了T型別的數值,那麼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("整型資料:", data)
    } else if data, ok := v.(float64); ok {
        fmt.Println("浮點型資料:", data)
    } else if data, ok := v.(string); ok {
        fmt.Println("字串資料:", data)
    } else if data, ok := v.(func()); ok {
        //函數呼叫
        data()
    }
}

2. switch測試

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("浮點型",value)
    case string:
        fmt.Println("字串",value)
    case func():
        fmt.Println("函數",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
	//型別查詢,型別斷言
	//第一個返回下標,第二個返回下標對應的值, data分別是i[0], i[1], i[2]
	for index, data := range i {
		//第一個返回的是值,第二個返回判斷結果的真假
		if value, ok := data.(int); ok == true {
			fmt.Printf("x[%d] 型別為int, 內容為%dn", index, value)
		} else if value, ok := data.(string); ok == true {
			fmt.Printf("x[%d] 型別為string, 內容為%sn", index, value)
		} else if value, ok := data.(Student); ok == true {
			fmt.Printf("x[%d] 型別為Student, 內容為name = %s, id = %dn", 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, 內容為%dn", index, value)
		case string:
			fmt.Printf("x[%d] 型別為string, 內容為%sn", index, value)
		case Student:
			fmt.Printf("x[%d] 型別為Student, 內容為name = %s, id = %dn", index, value.name, value.id)
		}

	}
}

以上就是GO語言型別查詢型別斷言範例解析的詳細內容,更多關於GO型別查詢型別斷言 的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com