不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2017-10-29 20:38:40  修改时间:2024-04-14 01:17:26  分类:Golang/Ruby  编辑

1、判断 类型

类似于 JavaScript 中 typeof 和 Java 中 instanceof

var a interface{}
newA, ok := a.(string)
// 如果 ok 是 true,则说明 变量 a 是字符串类型,而 newA 就是 string 类型的变量,a 的实际值
//

2、判断 key 是否在 map 中

var nameList = map[string]string{"姓名": "李四", "性别": "男"}
name, ok := nameList["姓名"] // 假如 key 存在,则 ok = true,否则,ok = false
if ok {
  fmt.Println(name)
}

3、判断 channel 是否 已关闭 且 没有数据

for {
    x, ok := <-chantest
    if !ok {
        break // 通道 已关闭 且 没有数据,则跳出循环
    }
}

 


 

温馨提示:

判断类型,还有另外一种方式:和 switch 结合

var v interface{}
// 省略了部分代码
// v = 8
// v = "wenjianbao"

switch i := v.(type) {
case string:
    fmt.Printf("The string is '%s'\n", i)
case int, uint, int8, uint8, int16, uint16, int32, uint32, int64, uint64:
    fmt.Printf("The interger is %d\n", i)
default:
    fmt.Printf("Unsupporte value.(type=%T)\n", i)
}

这里的 i := v.(type) 使经类型转换后的值得以保存。i 的类型一定会是 v 的值的实际类型。

详情:《Go学习笔记 . 雨痕》流程控制(if、switch、for range、goto、continue、break)