gpt4 book ai didi

go - panic : runtime error: index out of range

转载 作者:IT王子 更新时间:2023-10-29 01:27:49 33 4
gpt4 key购买 nike

抱歉,如果这看起来很基本,但为什么我会收到此错误?我没有看到任何超出范围的 slice/数组。

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]
}

谢谢

最佳答案

[...]int{1,2,3}不是 slice 。它是一个容量为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() 的返回值(忽略)。
这将打印“预期”结果(使用追加,因此变异并添加到 slice 中):

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]

这 ( playground ) 实际上会反转 slice :

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]

关于go - panic : runtime error: index out of range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369868/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com