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

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


编辑:尝试初始化,但仍然收到相同的错误。rr:= []*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

}


繁花如伊
浏览 171回答 1
1回答

慕桂英3389331

你正在做的是“嘿,去制作一个变量r,它是房间结构中的一段指针” r:= []*Room{}“,然后在For上使用,所以基本尝试访问内存中不存在的位置。所以你需要附加到那个切片中,比如 r = append(r,&Room{})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go