脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - GO语言类型查询类型断言示例解析

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

2022-09-19 16:43Jeff的技术栈 Golang

这篇文章主要为大家介绍了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。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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测试

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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判断

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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判断

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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语言类型查询类型断言示例解析的详细内容,更多关于GO类型查询类型断言 的资料请关注服务器之家其它相关文章!

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

延伸 · 阅读

精彩推荐
  • GolangGo 每日一库之termtables的使用

    Go 每日一库之termtables的使用

    本文主要介绍了Go 每日一库之termtables的使用,termtables处理表格形式数据的输出。是一个很小巧的工具库。具有一定的参考价值,感兴趣的小伙伴们可以参...

    darjun9652021-08-13
  • Golang浅谈go-restful框架的使用和实现

    浅谈go-restful框架的使用和实现

    这篇文章主要介绍了浅谈go-restful框架的使用和实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    nino''s blog5342020-05-15
  • GolangGo打包二进制文件的实现

    Go打包二进制文件的实现

    这篇文章主要介绍了Go打包二进制文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    赵栩彬11192020-06-07
  • Golanggolang将切片或数组根据某个字段进行分组操作

    golang将切片或数组根据某个字段进行分组操作

    这篇文章主要介绍了golang将切片或数组根据某个字段进行分组操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    思维的深度11562021-03-14
  • GolangGolang 1.16中Module机制更新

    Golang 1.16中Module机制更新

    最近,Golang发布了一个新版本1.16。版本引入了很多新功能,其中在模块方面的改进,今天我们就一起来深入学习一下。 ...

    虫虫安全18472021-02-22
  • Golang使用golang写一个redis-cli的方法示例

    使用golang写一个redis-cli的方法示例

    这篇文章主要介绍了使用golang写一个redis-cli的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    liangwt2562020-05-20
  • GolangGolang 标准库 tips之waitgroup详解

    Golang 标准库 tips之waitgroup详解

    本篇文章给大家介绍Golang 标准库 tips之waitgroup的相关知识,包括使用 channel 实现 WaitGroup 的功能介绍,感兴趣的朋友跟随小编一起看看吧...

    Golang教程网4332021-08-16
  • GolangGo语言空结构体详解

    Go语言空结构体详解

    本文主要介绍了Go语言空结构体详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    漫漫Coding路9862022-08-31