Golang结构数组值不附加In循环

时间:2015-12-17 08:02:07

标签: struct go append 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)
}

我需要将值附加到类别中。这些值只追加一次。但是我需要将值附加到数组中。

如何解决这个问题?

1 个答案:

答案 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