【发布时间】:2016-02-16 21:56:41
【问题描述】:
我今天遇到了一个奇怪的错误。我有一个功能:
func Foo(s *someStruct) {
fmt.Printf("s is %v\n", s)
if s!=nil {
fmt.Printf("s is not nil")
...
}
}
我会这样调用函数:
var s *someStruct
Foo(s)
然后我决定将结构转换为接口:
func Foo(s someStructInterface) {
fmt.Printf("s is %v\n", s)
if s!=nil {
fmt.Printf("s is not nil")
...
}
}
这给了我一个奇怪的输出:
s is null
s is not nil
虽然我希望得到s is nil,但这是我通常得到的。在 Go 的这种情况下,null 和 nil 有什么区别?如何检查某些内容是 null 还是 nil 以正确执行代码?
【问题讨论】:
-
您的接口示例的输出是
s is <nil>和s is not nil。
标签: pointers go interface null