golang数组引用例如.b [1:4]引用元素1,2,3

bri*_*noh 6 go

golang博客指出:

"也可以通过"切片"现有切片或数组来形成切片.通过指定半开放范围来完成切片,其中两个索引用冒号分隔.例如,表达式b [1:4]创建一个切片,包括b的元素1到3(结果切片的索引将是0到2)."

有人可以向我解释上面的逻辑.IE浏览器.为什么b [1:4]没有参考元素1到4?这与其他阵列引用一致吗?

Mat*_*ner 8

索引指向元素的"开始".所有使用从零开始的索引的语言共享:

       | 0 | first | 1 | second | 2 | third | 3 | fourth | 4 | fifth | 5 |
[0]   =  ^
[0:1] =  ^ --------> ^
[1:4] =              ^-------------------------------------> ^  
[0:5] =  ^ ----------------------------------------------------------> ^
Run Code Online (Sandbox Code Playgroud)

支持负索引也很常见,尽管Go不允许这样做:

       |-6 |       |-5 |        |-4 |       |-3 |        |-2 |       |-1 |
       | 0 | first | 1 | second | 2 | third | 3 | fourth | 4 | fifth | 5 |
Run Code Online (Sandbox Code Playgroud)


pet*_*rSO 4

原因在 Go 语言规范的Slices部分给出。

对于字符串、数组或切片 a,主表达式

    a[low : high]
Run Code Online (Sandbox Code Playgroud)

构造一个子字符串或切片。索引表达式 low 和 high 选择哪些元素出现在结果中。结果的索引从 0 开始,长度等于高 - 低。

为了方便起见,可以省略任何索引表达式。缺失的低指数默认为零;缺少的高索引默认为切片操作数的长度。

计算切片长度的高 - 低非常简单且高效。