【问题标题】:Golang struct array values not appending In loopGolang结构数组值不附加在循环中
【发布时间】:2016-03-23 14:49:17
【问题描述】:

这是我的代码:

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)
}

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

如何解决这个问题?

【问题讨论】:

    标签: struct go append slice


    【解决方案1】:

    您没有向book.Categories 附加任何内容,在for 循环的每次迭代中,您始终使用composite literal 创建一个新切片并将其分配给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,只需将值分配给正确的元素而不调用@ 987654332@。这样更有效率:

    book.Categories = make([]Category, 10)
    for i := range book.Categories {
        book.Categories[i] = Category{
            Id:   10,
            Name: "Vanaraj",
        }
    }
    

    【讨论】:

    • 先生,我遇到了同样的问题,这个解决方案解决了
    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2021-07-03
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多