在Golang中,如何测试一个map或channel是否未初始化?

huangapple go评论84阅读模式
英文:

In golang how to test a map or channel is uninitialized

问题

如何测试m和c是否未初始化(使用make)?

你可以使用以下方法来测试m和c是否已经通过make进行了初始化:

  1. 对于map类型的变量m,可以使用len函数来检查其长度。如果m未初始化,len(m)将返回0。

    示例代码:

    if len(m) == 0 {
        // m未初始化
    } else {
        // m已初始化
    }
    
  2. 对于channel类型的变量c,可以使用reflect包中的ValueOf函数来检查其是否为零值。如果c未初始化,其值将为nil。

    示例代码:

    import "reflect"
    
    if reflect.ValueOf(c).IsNil() {
        // c未初始化
    } else {
        // c已初始化
    }
    

请注意,以上方法仅适用于使用make进行初始化的map和channel类型变量。如果你使用其他方式进行初始化,可能需要使用不同的方法来进行检查。

英文:
var m map[int]int
var c chan int

How to test if m and c is uninitialized with make

答案1

得分: 3

你可以使用nil来比较值,以查看它们是否已初始化。例如:

var m map[int]int
var c chan int
fmt.Println("m 是否未初始化:", m == nil) // true
fmt.Println("c 是否未初始化:", c == nil) // true

m = make(map[int]int)
c = make(chan int)
fmt.Println("m 是否未初始化:", m == nil) // false
fmt.Println("c 是否未初始化:", c == nil) // false

playground 示例代码 - https://play.golang.org/p/FzhygumF4v

英文:

You can compare the values with nil to see if they're initialized. For example:

var m map[int]int
var c chan int
fmt.Println("is m uninitialized:", m == nil) // true
fmt.Println("is c uninitialized:", c == nil) // true

m = make(map[int]int)
c = make(chan int)
fmt.Println("is m uninitialized:", m == nil) // false
fmt.Println("is c uninitialized:", c == nil) // false

playground example code - https://play.golang.org/p/FzhygumF4v

答案2

得分: 1

如果 m == nil 或者 c == nil {
wtf();
}

英文:
if m == nil || c == nil {
   wtf();
}

huangapple
  • 本文由 发表于 2017年5月4日 15:45:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/43776841.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定