为什么这段代码会引发“切片边界超出范围”的错误?

huangapple go评论82阅读模式
英文:

Why this code raise slice bound out of range?

问题

我不知道为什么这段代码总是超出范围:

parts := make([]string, 0, len(encodedCode)/4)

for i := 0; i < len(encodedCode); i += 4 {
    parts = append(parts, encodedCode[i:4])
}

encodedCode 是一个长度总是是4的倍数的字符串。这意味着 encodedCode[i:4] 永远不会超出范围。

英文:

I have no idea why this code always slice bound out of range:

<!-- language: lang-golang -->

parts := make([]string, 0, len(encodedCode)/4)

for i := 0; i &lt; len(encodedCode); i += 4 {
    parts = append(parts, encodedCode[i:4])
}

encodedCode is string with length always multiply with 4. That mean encodedCode[i:4] never out of bound.

答案1

得分: 5

切片是 [idx_start:idx_end+1],而不是 [idx_start:length]

试试这个。

parts := make([]string, 0, len(encodedCode)/4)
for i := 0; i < len(encodedCode); i += 4 {
    parts = append(parts, encodedCode[i:i+4])
}

好的示例可以在这里找到:http://blog.golang.org/go-slices-usage-and-internals

英文:

Slices are [idx_start:idx_end+1], not [idx_start:length]

Try this.

parts := make([]string, 0, len(encodedCode)/4)
for i := 0; i &lt; len(encodedCode); i += 4 {
    parts = append(parts, encodedCode[i:i+4])
}

Good examples @ http://blog.golang.org/go-slices-usage-and-internals

huangapple
  • 本文由 发表于 2014年12月17日 13:20:23
  • 转载请务必保留本文链接:https://go.coder-hub.com/27518814.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定