1 回答
TA贡献1793条经验 获得超6个赞
[...]int{1,2,3}不是切片。它是一个容量为 3 的数组。
参见“ golang-101-hacks: Array ”
如果您尝试附加第四个元素......那将超出范围。
但是这里s[:] 将其转换为 slice。
实际的 ' index out of range' 来自input[len(input)-i]其中,带有i=0,表示input[len(input)]:超出范围。
这会更好(操场)(没有超出范围)
最后fmt.Println(s)仍然打印原始数组,而不是返回rev()(被忽略)。
这将打印“预期”结果(使用追加,因此变异并添加到切片):
package main
import "fmt"
func main() {
s := [...]int{1, 2, 3}
t := rev(s[:])
fmt.Println(s)
fmt.Println(t)
}
func rev(input []int) []int {
var j int
l := len(input) - 1
for i := 0; i <= l; i++ {
j = input[l-i]
input = append(input, j)
}
return input
}
结果:
[1 2 3]
[1 2 3 3 2 1]
这(游乐场)实际上会反转切片:
var j int
var res []int
l := len(input) - 1
for i := 0; i <= l; i++ {
j = input[l-i]
res = append(res, j)
}
return res
结果:
[1 2 3]
[3 2 1]
- 1 回答
- 0 关注
- 207 浏览
添加回答
举报