【发布时间】:2018-10-22 16:18:09
【问题描述】:
这段代码对我来说看起来很违反直觉:
var first *byte
var second interface{}
fmt.Println(first, first == nil) // <nil> true
fmt.Println(second, second == nil) // <nil> true
fmt.Println(first == second) // false
据我了解,情况是第一个变量是指向byte 类型的空变量的指针,而第二个是空接口。因此,由于变量不是同一类型,因此它们不被认为是相等的。
但是如果它们彼此不相等,它们怎么可能等于某个第三个值呢?不遵守传递律时编程语言中的常见情况吗?
【问题讨论】:
-
nil是一个特殊的值,不要在它上面建立你的逻辑。另见Hiding nil values, understanding why golang fails here。