【发布时间】:2015-01-30 20:39:43
【问题描述】:
我们可以通过地图轻松做到这一点:
item, ok := myMap["index"]
但不是切片:
item, ok := mySlice[3] // panic!
很惊讶以前没有人问过这个问题。也许我对 Go 切片的心智模型有误?
【问题讨论】:
-
为什么有这么多反对者?如果有人在这里不高兴,你就不能再提出任何问题了。
-
我也不明白为什么。认为 map 和 slice 的工作方式相同并非没有道理,就像 std::map 和 std::vector 在 C++ 中具有相似的接口一样。
-
我(错误地)假设 Go 切片基本上是具有连续 int 键的映射。快速浏览一下语法可以让你采用这种心理模型,顺便说一句。不过,仍然不明白为什么会因此而对一个问题投反对票。让我想知道围棋社区是否被被动攻击性的 CI 学生或其他东西入侵了 LOL
-
@marcioAlmada:我认为问题在于通过查看文档很容易回答这个问题(并且几乎没有努力)。一般而言,SO 社区更喜欢先花一点力气解决问题。你说你自己做了一个错误的假设,因为你只是根据语法猜测。
-
@marcioAlmada 请停止猜测。 APL 语法和语义在 Java 中不起作用,C++ 语义不适用于 Lisp,并且任何其他语言都不适合引用 Go。我真的可以推荐 Go Tour、Effective Go 和语言参考。例如。 golang.org/ref/spec#Index_expressions 中明确描述了超出范围的切片访问。