我已经阅读了一些关于 nil slice 与 empty slice 的文本。我相信我对它们之间的差异有一些基本的了解。
我的理解总结:var instance []Typeis nil slice and instance == nilreturn true; whileinstance:=[]Type{}是空切片并且instance != nil
然而,这个特殊的例子仍然让我感到困惑。
请查看下面的链接以获取代码。我的问题是最后两个案例。 https://play.golang.org/p/udyHoOlSeP
假设我想比较两个切片,重命名类型和接口匹配等等。接收者可以是的实例nil,即使它没有被定义为按值复制;虽然参数是按值复制的,但只要参数不是无类型的,它似乎是非零的。
在最后两种情况下,接收器已被识别为nilwhile 参数正在处理,:=因此它变成了一个空切片。(但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 在答案中的评论!
喵喵时光机
相关分类