当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Golang结构数组值不附加In循环》经验,为你挑选了1个好方法。

这是我的代码:

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> icza..:

您没有附加任何内容book.Categories,在循环的每次迭代中,for您始终使用复合文字创建一个新切片并将其分配给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并只需将值分配给正确的元素而无需调用append().这更有效:

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

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有