struct - Golang 结构数组值不 append 在循环中

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

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

如何解决这个问题?

最佳答案

您没有向 book.Categories 添加任何内容,在 for 循环的每次迭代中,您总是创建一个带有 composite literal 的新 slice 然后将其分配给 book.Categories

如果你想 append 值,使用内置的 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),则可以事先创建一个足够大的 slice ,您可以使用 for ... range 并在不调用 append() 的情况下将值分配给适当的元素。这样效率更高:

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

关于struct - Golang 结构数组值不 append 在循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34329441/

相关文章:

c - 使用文件在 C 中保存结构

c++ - 访问结构成员问题

go - 需要帮助理解 goroutine、select 和 channel 并发背后的逻辑

java - 如何将 HashMap<String, ArrayList<String>> 存储在列表中?

python - 如何在数据框列中 append 值

struct - 调用参数结构的构造函数时发生方法错误

heroku - 使用 Heroku 部署 Go 应用

node.js - 使用 nodejs 客户端访问 golang websocket 服务器

python - 高效 append 到 Pandas 数据帧

json - 如何在golang中初始化以下结构的结构