千家信息网

GO语言查询类型断言的方法

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要介绍"GO语言查询类型断言的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"GO语言查询类型断言的方法"文章能帮助大家解决问题。类型查询我们知道
千家信息网最后更新 2024年11月17日GO语言查询类型断言的方法

这篇文章主要介绍"GO语言查询类型断言的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"GO语言查询类型断言的方法"文章能帮助大家解决问题。

类型查询

我们知道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 mainimport "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, 内容为%d\n", index, value)                } else if value, ok := data.(string); ok == true {                        fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value)                } else if value, ok := data.(Student); ok == true {                        fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id)                }        }}

Switch判断

package mainimport "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, 内容为%d\n", index, value)                case string:                        fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value)                case Student:                        fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id)                }        }}

关于"GO语言查询类型断言的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0