这是我的代码:
package main
import(
"fmt"
)
type Category struct {
Id int
Name string
}
type Book struct {
Id int
Name string
Categories []Category
}
func main() {
var book Book
book.Id = 1
book.Name = "Vanaraj"
for i := 0; i < 10; i++ {
book.Categories = []Category{
{
Id : 10,
Name : "Vanaraj",
},
}
}
fmt.Println(book)
}
我需要将值 append 到类别。这些值仅 append 一次。但我需要将值 append 到数组。
如何解决这个问题?
最佳答案
您没有向 book.Categories
添加任何内容,在 for
循环的每次迭代中,您总是创建一个带有 composite literal 的新 slice 然后将其分配给 book.Categories
。
如果你想 append 值,使用内置的 append()
功能:
for i := 0; i < 10; i++ {
book.Categories = append(book.Categories, Category{
Id: 10,
Name: "Vanaraj",
})
}
输出(在 Go Playground 上尝试):
{1 Vanaraj [{10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj}]}
另请注意,如果您事先知道迭代次数(在您的情况下为 10
),则可以事先创建一个足够大的 slice ,您可以使用 for ... range
并在不调用 append()
的情况下将值分配给适当的元素。这样效率更高:
book.Categories = make([]Category, 10)
for i := range book.Categories {
book.Categories[i] = Category{
Id: 10,
Name: "Vanaraj",
}
}
关于struct - Golang 结构数组值不 append 在循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329441/