这是我的代码:
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)
}
我需要将值附加到类别中。这些值只追加一次。但是我需要将值附加到数组中。
如何解决这个问题?
答案 0 :(得分:13)
您没有向for
添加任何内容,在book.Categories
循环的每次迭代中,您始终使用composite literal创建新切片,并将其分配给for i := 0; i < 10; i++ {
book.Categories = append(book.Categories, Category{
Id: 10,
Name: "Vanaraj",
})
}
。
如果要追加值,请使用内置append()
函数:
{1 Vanaraj [{10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj} {10 Vanaraj}]}
输出(在Go Playground上尝试):
10
另请注意,如果您事先知道迭代计数(在您的情况下为for ... range
),您可以预先创建一个足够大的切片,您可以使用append()
并只为正确的值分配值元素没有调用book.Categories = make([]Category, 10)
for i := range book.Categories {
book.Categories[i] = Category{
Id: 10,
Name: "Vanaraj",
}
}
。这更有效:
navigationController?.hidesBarsOnTap = true