go - 像 [0 :2] 这样的 slice 声明

标签 go slice

我不明白 Go 中的 slice 声明。

对于我来说,数组的第一个和第二个元素的声明必须是 0:1。 但它是0:2。为什么?我应该如何从零读到 2 减 1(始终)?

var slice = array[0:2]  

最佳答案

slice 边界是 half open ,这对于许多编程语言来说是非常标准的。一个优点是它使范围的长度变得明显 (2-0=2)。具体来说,这样做很常见:

s[start:start+len]

很明显,这会从 slice 中选择 len 个元素,从 start 开始。如果范围完全闭合(包括两个边界),代码中必须有很多 -1 来处理 slice 和子 slice 。

它在 C++ 范围和 Python 等中的工作方式类似。这是来自 C++ answer 的一些推理。 ,归因于 Dijkstra:

  • 您希望范围的大小是一个简单的差异 end - begin;

  • 当序列退化为空序列时,包括下限会更“自然”,而且因为备选方案(不包括下限)需要存在“one-before-the-beginning”标记值.

关于go - 像 [0 :2] 这样的 slice 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843269/

相关文章:

go - 惯用的 Golang - 可读性与运行时内存保护

python - 在我的 .html 文件中使用 python 切片字符串

go - 通过反射将 "interface {}"类型转换为 "interface {}"类型 slice 中的另一个接口(interface)

go - 在golang中连接2个 slice

list - 如何扩展 Scala 列表以启用不是按显式位置而是按给定谓词/条件的切片

c++ - () 运算符的这种特殊用法是什么意思?

go - 是否可以保证成员调用之间的评估顺序?

go - 如何获取 http.ListenAndServe 的地址

arrays - 如何在 golang 中创建具有动态长度而不是 slice 的数组?

go - 在 golang 中更新 grpc 的接收和发送消息大小