【问题标题】:Index out of range [1] with length 0索引超出范围 [1],长度为 0
【发布时间】:2021-08-01 17:52:07
【问题描述】:

我正在使用 Go 开发一个小 MUD,并且我正在尝试从文件中读取包含退出的房间列表。 我希望代码遍历文件的行,将索引为 1 的每一行归档到房间 ID,将索引为 2 的每一行归档到房间描述,而索引为 3 的每一行都用于填写房间的链接。但是,当我运行代码时,我会感到恐慌:运行时错误:indext out of range[1] with length 0。我已经考虑了两天了,但没有运气,任何帮助都会非常感激。

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

    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
}

【问题讨论】:

  • 什么是MUD? .
  • 多人地下城,一种基于文本的服务器角色扮演游戏。以 CoffeeMud 为例。
  • 你没有初始化r
  • @BurakSerdar 尝试使用 r = []*Room{] 初始化 r 仍然得到相同的错误
  • @Hermeneut 你希望r[index] 增长切片吗?

标签: arrays go indexing iteration runtime-error


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多