索引超出范围 [1],长度为 0

我正在 Go 中处理一个小 MUD,我正在尝试从文件中读取带有退出的房间列表。 我希望代码遍历文件的各行,将索引为 1 的每一行归档到房间 ID,将索引为 2 的每一行归档到房间描述,并将索引 3 的每一行都用于填充房间的链接。然而,当我运行代码时,我得到了一个恐慌:运行时错误:索引超出范围 [1] 长度为 0。我已经考虑了两天没有运气,任何帮助都会很感激。

编辑:尝试使用 r 初始化 r:= []*Room{},但仍然遇到相同的错误。

    r:= []*Room{}
    roomdoc,err := readLines("/usr/go/src/gopherit/GopherIT/roomdoc.txt")
    if err != nil {
        return r,err
    }
    i := 0
    index := 1
    for _,str := range roomdoc {
        if i == 0 {
            r[index].roomInitId(str)
            i++
        }
        if i == 1 {
            r[index].roomInitDesc(str)
            i++
        }
        if i == 2 {
            vri := strings.Split(str,":")
            v,ri := vri[0],vri[1]
            r[index].addLink(v,ri)
            i++
        }
        if i == 3 {
            index++
            i = 0
        }

    }
    return r,err
}
zml8821929 回答:索引超出范围 [1],长度为 0

你在做什么是“嘿,去创建一个变量 r,它是来自 Room Struct 的一个指针片段”r:= []*Room{}”然后在 For 上使用,所以基本尝试访问一个在该上下文中不存在的内存位置。

所以你需要附加到那个切片中,比如 r = append(r,&Room{})

本文链接:https://www.f2er.com/1067.html

大家都在问