这是我的代码:
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) }
我需要将值附加到类别.这些值只追加一次.但是我需要将值附加到数组中.
如何解决这个问题?
您没有附加任何内容book.Categories
,在循环的每次迭代中,for
您始终使用复合文字创建一个新切片并将其分配给book.Categories
.
如果要追加值,请使用内置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
在您的情况下),您可以预先创建一个足够大的切片,您可以使用for ... range
并只需将值分配给正确的元素而无需调用append()
.这更有效:
book.Categories = make([]Category, 10) for i := range book.Categories { book.Categories[i] = Category{ Id: 10, Name: "Vanaraj", } }