Golang - 像[0:2]这样的切片声明

ABS*_*mon 4 go slice

我不理解Go中的切片声明.

对于我来说,数组的第一个和第二个元素的声明必须是0:1.但它是0:2.为什么?我怎么读这个,从零到2减去1(所有时间)?

var slice = array[0:2]  
Run Code Online (Sandbox Code Playgroud)

对不起我的愚蠢问题,但这对我没有意义.

Eli*_*sky 7

切片边界是半开放的,这是许多编程语言的标准.一个优点是它使得范围的长度明显(2-0 = 2).具体来说,通常这样做:

s[start:start+len]
Run Code Online (Sandbox Code Playgroud)

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

它在C++范围和Python等中的工作方式类似.以下是来自Dijkstra 的C++答案的一些推理:

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

  • 当序列退化为空的时,包括下限更"自然",并且因为替代(不包括下限)将需要存在"一个在开始之前"的前哨值.