切片声明,例如[0:2]

时间:2019-02-23 15:47:51

标签: go slice

我不了解Go中的切片声明。

对于,我对数组的第一个和第二个元素的声明必须为0:1。 但这是0:2。为什么?我应该怎么读,从零到2减去1(一直)?

var slice = array[0:2]  

2 个答案:

答案 0 :(得分:7)

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

s[start:start+len]

很明显,这会从切片中选择len元素,从start开始。如果范围是完全封闭的(包括两个边界),则代码中将有很多-1来处理切片和细分。

它在C ++范围和Python等中也类似。这是归因于Dijkstra的C++ answer的一些原因:

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

  • 当序列退化为空序列时,包含下界的
  • 更加“自然”,并且还因为替代项(不包括下界)将需要存在“一个从头开始”的前哨值

答案 1 :(得分:1)

  

通过指定两个索引(下限和上限)形成切片   用冒号分隔:

     

a[low : high]

     

这将选择一个半开范围,其中包括第一个   元素,但不包括最后一个。

这是Golang在切片https://tour.golang.org/moretypes/7上的页面