对不起,如果这看起来很基本,但为什么我会收到此错误?我没有看到任何切片/阵列超出范围 .
package main
import "fmt"
func main(){
s:= [...]int{1,2,3}
rev(s[:])
fmt.Println(s)
}
func rev(input []int) []int {
var j int
l:=len(input)-1
for i:=0; i<l;i++ {
j= input[len(input)-i]
input=append(input, j)
i++
}
return input[:l]
}
谢谢
1 回答
[...]int{1,2,3}
不是切片 . 它是一个容量阵列3 .见“golang-101-hacks: Array”
如果你试图附加第四个元素......那将超出范围 .
但这里
s[:]
transforms it into a slice .实际的'
index out of range
'来自input[len(input)-i]
,其中i=0
表示input[len(input)]
:超出范围 .这会更好(playground)(不超出范围)
最终
fmt.Println(s)
仍然打印原始数组,而不是rev()
的返回(被忽略) .这将打印"expected"结果(使用追加,因此变异并添加到切片):
结果:
这个(playground)实际上会反转切片:
结果: