我想在一个拥有切片的结构上创建一个函数。 我的问题是:我想使用指针参数,因为我必须修改我的结构内容。
这是我的代码:
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世界(我非常抱歉)所以我的处理方式可能不对。
使用此代码,编译出错并说“&34;未解析的参考”#34;在我的"对象"属性。
我的问题很简单:发生了什么?
感谢您的帮助,您的时间和善意:)
答案 0 :(得分:0)
方法是在类型上定义的。 CampaignIndexMemory
不是struct
,而是type
。类型是" CampaignIndex
"。
切片保存对基础数组的引用,如果您指定一个 切片到另一个,都指向同一个数组。如果一个函数需要一个 切片参数,它对切片的元素所做的更改 对调用者可见,类似于将指针传递给 底层数组。
这意味着方法setCampaignIndex
的接收方可能是slice
而不是指向切片的指针。更改将应用于呼叫者。
func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {
指向切片的指针指向slice header所以我猜你得到的错误是因为切片标头不包含Object
字段。