van*_*jcs 3 struct append go slice
这是我的代码:
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)
}
Run Code Online (Sandbox Code Playgroud)
我需要将值附加到类别.这些值只追加一次.但是我需要将值附加到数组中.
如何解决这个问题?
icz*_*cza 15
您没有附加任何内容book.Categories,在循环的每次迭代中,for您始终使用复合文字创建一个新切片并将其分配给book.Categories.
如果要追加值,请使用内置append()函数:
for i := 0; i < 10; i++ {
book.Categories = append(book.Categories, Category{
Id: 10,
Name: "Vanaraj",
})
}
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
{1 Vanaraj [{10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj}]}
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您事先知道迭代计数(10在您的情况下),您可以预先创建一个足够大的切片,您可以使用for ... range并只需将值分配给正确的元素而无需调用append().这更有效:
book.Categories = make([]Category, 10)
for i := range book.Categories {
book.Categories[i] = Category{
Id: 10,
Name: "Vanaraj",
}
}
Run Code Online (Sandbox Code Playgroud)