【问题标题】:How to append a slice in struct [duplicate]如何在结构中附加切片[重复]
【发布时间】:2019-11-09 16:50:45
【问题描述】:

Go 向切片或数组添加项的语法是什么?

package main

import "fmt"

type Car struct{
    Code string
    Brand string
    Type string
    Price int 
    Supply int
}

var Stock []Car

func init()  {
    Stock = []Car{
        Car{
            Code:"TOY13EMTAV",
            Brand:"Toyota Avanza",
            Type:"1.3 E M/T",
            Price:191100000,
            Supply:2,
        },
        Car{
            Code:"TOY15GMTAV",
            Brand:"Toyota Avanza",
            Type:"1.5 G M/T",
            Price:221250000,
            Supply:3,
        },
        Car{
            Code:"TOY15GCVTYAR",
            Brand:"Toyota Yaris",
            Type:"G CVT",
            Price:257650000,
            Supply:5,
        },
    }
}

【问题讨论】:

  • 您好,欢迎并感谢您的提问!您能否用您迄今为止尝试过的内容更新您的示例,以便我们了解您正在尝试做什么?
  • 我试过这种方式 @SamWhited ` func addStock(){ var new Car var totalArr int totalArr = len(Stock) fmt.Scanln(&new.Code,&new.Brand,&new.Type ,&new.Price,&new.Supply) append(Stock[totalArr].Code,new.Code) }` 但我得到一个错误,比如第一个参数 append must be slice;有字符串
  • 我添加了一个示例来解释这一点; append 的第一个参数确实是切片本身。但是,看起来您可能正在尝试修改切片中的某些内容,而不是实际添加新车?这在您最初的问题中并不清楚。这是你想要做的,还是你想在切片上添加一辆新车?
  • 您不能向数组中添加任何内容。数组是固定长度的。您只能更改数组元素。要添加到切片,请使用append

标签: arrays go struct slice


【解决方案1】:

可以使用append 内置方法将数据添加到切片中。要附加到切片,请将切片作为参数传递并将新切片分配回原始切片。如果您只是学习语言,那么为什么必须这样做的细节并不重要,但只要说它使事情变得更有效率就足够了。例如:

Stock = append(Stock, Car{
  Code: "newcar",
  // …
})

如果您想更好地了解append,您还可以在附加的Effective Go 中找到this section

这是您的示例的修改版本,可以在 Go 操场上运行。我对代码进行了一些其他的小改动,这些改动可能对新开发人员学习有用也可能没用:

https://play.golang.org/p/AqlrL47pImw

【讨论】:

  • 好的,现在我已经开始了解它在 go 中的工作方式了,谢谢你的帮助
  • 我很高兴这对您有所帮助,祝您学习 Go 好运,它是一门不错的小语言,我相信您会喜欢的!如果这回答了您的问题,请不要忘记用大绿色复选框将其标记为答案,以帮助将来可能在搜索时偶然发现此问题的其他人。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2020-07-06
  • 2016-12-24
  • 1970-01-01
  • 2019-04-12
  • 2021-08-06
  • 1970-01-01
相关资源
最近更新 更多