Golang结构数组值不附加在循环中

Posted

技术标签:

【中文标题】Golang结构数组值不附加在循环中【英文标题】:Golang struct array values not appending In loop 【发布时间】: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)

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

如何解决这个问题?

【问题讨论】:

【参考方案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",
    

【讨论】:

先生,我遇到了同样的问题,这个解决方案解决了

以上是关于Golang结构数组值不附加在循环中的主要内容,如果未能解决你的问题,请参考以下文章

Golang 不能用作类型结构数组或切片文字

Golang中结构体Struct

Golang中结构体Struct

Golang中结构体Struct

golang - channel

如何在golang中将切片附加到字节数组