Arrays Go接口片和指针

Arrays Go接口片和指针,arrays,pointers,go,struct,slice,Arrays,Pointers,Go,Struct,Slice,我想在一个具有切片的结构上生成一个函数。 我的问题是:我想使用指针参数,因为我必须修改我的结构内容 这是我的密码: type CampaignIndexMemory []CampaignIndex type CampaignIndex struct { Objects []CampaignIndexObject } type CampaignIndexObject struct { //They don't really care about us } func (c *C

我想在一个具有切片的结构上生成一个函数。 我的问题是:我想使用指针参数,因为我必须修改我的结构内容

这是我的密码:

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世界(我非常抱歉),所以我的做法可能是错误的

在这段代码中,编译出错,并在我的“Objects”属性上显示“unresolved reference”

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


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

方法是在类型上定义的
CampaignIndexMemory
不是
struct
,而是
类型
。类型为“活动索引的切片”

切片保存对底层数组的引用,如果指定了一个 切片到另一个,两者都引用相同的数组。如果函数采用 slice参数,它对切片元素所做的更改将 调用方可见,类似于将指针传递给 底层数组

这意味着方法
setActivityIndex
的接收者可能是
切片
,而不是指向切片的指针。更改将应用于调用方

func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {

指向切片的指针指向,所以我猜您得到的错误是因为切片头不包含
对象
字段。

方法是在类型上定义的
CampaignIndexMemory
不是
struct
,而是
类型
。类型为“活动索引的切片”

切片保存对底层数组的引用,如果指定了一个 切片到另一个,两者都引用相同的数组。如果函数采用 slice参数,它对切片元素所做的更改将 调用方可见,类似于将指针传递给 底层数组

这意味着方法
setActivityIndex
的接收者可能是
切片
,而不是指向切片的指针。更改将应用于调用方

func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {

指向切片的指针指向,因此我猜您得到的错误是因为切片标头不包含
对象
字段。

“我想在具有切片的结构上创建一个函数。”但您的接收器不是
结构
,它是
*活动索引内存
,例如,指向
activityindex
es片段的指针。我刚刚将我的类型转换为struct,它运行良好。谢谢这是我的新代码:键入CampaignIndexMemory struct{indexes[]CampaignIndex},我只需要用c.indexes[I]替换我的所有c[I]“我想在一个具有片的结构上生成一个函数。”但你的接收者不是
结构
,而是
*CampaignIndexMemory
,例如,指向
activityindex
es片段的指针。我刚刚将我的类型转换为struct,它运行良好。谢谢这是我的新代码:键入campaignexmemory struct{indexes[]CampaignIndex},我只需要用c.indexes[I]替换所有的c[I]