登录
首页 >  Golang >  Go教程

GO语言类型查询类型断言示例解析

来源:脚本之家

时间:2022-12-28 07:57:05 165浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《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 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, 内容为%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 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, 内容为%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语言类型查询、类型断言的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表