一段struct struct access索引超出范围

时间:2014-08-03 15:48:00

标签: go

我正在尝试使用类型结构的切片。请看以下示例

package main

import (
    "fmt"
)

func main() {

    arr := []struct {
        A string
        B string
    } {}

    arr[0].A = "I am"
    arr[0].B = "First"

    arr[1].A = "I am"
    arr[1].B = "Second"

    fmt.Println(arr)

}

当我编译此代码时,我已经超出了范围错误。为什么?

2 个答案:

答案 0 :(得分:2)

您需要在切片中添加新元素(如果您不像FUZxxlanswer那样创建数组。) 使用命名类型而不是类型文字更容易。

请参阅“Appending to and copying slices”和“Arrays, slices (and strings): The mechanics of 'append'”。

示例play.golang.org

package main

import (
    "fmt"
)

func main() {

    type T struct {
        A string
        B string
    }

    arr := []T{}

    arr = append(arr, T{A: "I am", B: "First"})
    arr = append(arr, T{A: "I am", B: "Second"})

    fmt.Println(arr)
}

输出:

[{I am First} {I am Second}]

答案 1 :(得分:1)

您创建了一个包含0(零)元素的切片。访问索引01的元素无效。你可能想要这样的东西:

arr := make([]struct{ A, B string }, 2)

Go切片不会自动展开以为更多条目腾出空间。