【发布时间】:2016-03-22 14:07:39
【问题描述】:
我已经阅读了一些关于零切片与空切片的文本。我相信我对它们之间的区别有一些基本的了解。
我的理解总结:var instance []Type 为 nil 切片,instance == nil 返回true;而instance:=[]Type{} 是空切片,instance != nil
但是这个特殊的例子仍然让我感到困惑。
请查看下面的链接以获取代码。我的问题是最后两个案例。 https://play.golang.org/p/udyHoOlSeP
假设我想比较两个切片,重命名类型和接口匹配等等。接收者可以是nil 的实例,即使它没有定义为按值复制;虽然参数是按值复制的,但似乎
只要参数不是无类型的,就不是零。
在最后两种情况下,接收者被识别为nil,而:= 正在处理参数,因此它变成了一个空切片。 (但other == nil 也报告错误......)我怎样才能解决这个问题以满足以下要求?
nilslice.Equals(nilslice) // -> true
此外,我尝试定义另一个与接口指针相比的接口,但失败了。编译器抱怨
cannot use p (type *AnotherNullable) as type *PointerComparable in argument to AnotherNullable(nil).Equals:
*PointerComparable is pointer to interface, not interface
https://play.golang.org/p/wYO1GKcBds
我该如何解决这个问题?
编辑:感谢@zippoxer 提供的所有见解。我学到了很多。我也希望新读者也不要忘记查看@zippoxer在答案中的评论!
【问题讨论】:
-
我更新了我的答案来解决你的第一个问题:-)
标签: go