gpt4 book ai didi

arrays - Go接口(interface) slice 和指针

转载 作者:IT王子 更新时间:2023-10-29 02:23:22 26 4
gpt4 key购买 nike

我想在拥有 slice 的结构上创建一个函数。我的问题是:我想使用指针参数,因为我必须修改我的结构内容。

这是我的代码:

type CampaignIndexMemory []CampaignIndex

type CampaignIndex struct {
Objects []CampaignIndexObject
}

type CampaignIndexObject struct {
//They don't really care about us
}

func (c *CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {

valueSet := false
for i,_ := range c {
if c[i].Objects[0].ID == object.Objects[0].ID {
c[i] = object
valueSet = false
break
}
}
if valueSet {
c = append(c, object)
}
}

我来自 Java 世界(我深表歉意)所以我的处理方式可能是错误的。

使用此代码,编译出错,并在我的“对象”属性上显示“未解析的引用”。

我的问题很简单:发生了什么事?

感谢您的帮助、时间和善意 :)

最佳答案

方法是在类型上定义的。 CampaignIndexMemory 不是结构,而是类型。类型是“CampaignIndex 的 slice ”。

来自 documentation about slices

Slices hold references to an underlying array, and if you assign one slice to another, both refer to the same array. If a function takes a slice argument, changes it makes to the elements of the slice will be visible to the caller, analogous to passing a pointer to the underlying array.

这意味着方法 setCampaignIndex 的接收器可以是 slice 而不是指向 slice 的指针。更改将应用​​于调用方。

func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {

指向 slice 的指针指向 slice header所以我猜你得到的错误是因为 slice header 不包含 Object 字段。

关于arrays - Go接口(interface) slice 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com