登录
首页 >  Golang >  Go问答

超出范围的切片

来源:stackoverflow

时间:2024-03-20 19:27:30 390浏览 收藏

在 Go 语言中,切片索引错误可能是由于误解切片表达式。切片表达式的第二个数字是索引,而不是字符数。在提供的代码中,`fmt.Println(a[o-1 : 1])` 尝试访问 `a[4]` 到 `a[1]` 的元素,这会超出范围,因为切片有 11 个字符,有效索引范围为 `0` 到 `10`。正确的表达式应该是 `fmt.Println(a[o-1 : o])`,它会正确访问 `a[4]`。

问题内容

我有以下测试代码:

package main

import "fmt"

func main() {
    t1 := map[string]string{
        "1": "abcdefghijk",
        "2": "abcdefghijk",
        "3": "abcdefghijk",
        "4": "abcdefghijk",
        "5": "abcdefghijk"}
    o := 5
    a, b := t1["3"]
    fmt.print("selected line is: ")
    fmt.println(a)
    if b {
        fmt.print("output is ")
        fmt.println(a[o-1 : 1])
    }
}

但是当我运行它时出现此错误:

$ go run test.go
Selected line is: abcdefghijk
Output is panic: runtime error: slice bounds out of range [4:1]

goroutine 1 [running]:
main.main()
        /Users/jd/_Go/test1/test.go:18 +0x3e1
exit status 2

切片有11个字符长,那么[4:1]怎么会超出范围呢?!? 显然我正在做一些超级愚蠢的事情,但在令人抓狂的阶段,并且愿意经历全世界的尴尬来弄清楚它。

谢谢! 京东


解决方案


切片表达式中的第二个数字是索引,而不是字符数。您正在访问 a[4:1],从 a[4]a[1]

改为:fmt.Println(a[o-1 : o])

以上就是《超出范围的切片》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>