下面是一些代码:v == nil如何返回false和reflect.ValueOf(v).IsNil()同时返回true?
var v interface{}
v = (*string)(nil)
// Reflect says it is nil
val := reflect.ValueOf(v)
if val.IsNil() {
fmt.Println("val is nil")
} else {
fmt.Println("val is not nil")
}
// This says it is not nil
if v == nil {
fmt.Println("v is nil")
} else {
fmt.Println("v is not nil")
}
https://play.golang.org/p/apyPa4CNZ6
输出是:
VAL是零
v不是零
这怎么可能?是否无?
另外,如果你改变了前两行与
v := (*string)(nil)
则输出明确指出,变量是零。
现在在我的项目中,我有一个函数接受一个interface {}类型的参数,并且我无法可靠地检查它是否为nil,并带有一个简单的v == nil。我想避免使用反射包。
相关/可能重复[隐藏nil值,了解为什么golang在这里失败](http://stackoverflow.com/questions/29138591/hiding-nil-values-understanding-why-golang-fails-here/29138676# 29138676)。 – icza