我正在尝试使用类型结构的切片。请看以下示例
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)
}
当我编译此代码时,我已经超出了范围错误。为什么?
答案 0 :(得分:2)
您需要在切片中添加新元素(如果您不像FUZxxl的answer那样创建数组。) 使用命名类型而不是类型文字更容易。
请参阅“Appending to and copying slices”和“Arrays, slices (and strings): The mechanics of 'append'”。
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(零)元素的切片。访问索引0
和1
的元素无效。你可能想要这样的东西:
arr := make([]struct{ A, B string }, 2)
Go切片不会自动展开以为更多条目腾出空间。