转到界面切片和指针

时间:2016-03-29 13:50:00

标签: 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 *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;在我的"对象"属性。

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

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

1 个答案:

答案 0 :(得分:0)

方法是在类型上定义的。 CampaignIndexMemory不是struct,而是type。类型是" CampaignIndex"。

的切片

来自documentation about slices

  

切片保存对基础数组的引用,如果您指定一个   切片到另一个,都指向同一个数组。如果一个函数需要一个   切片参数,它对切片的元素所做的更改   对调用者可见,类似于将指针传递给   底层数组。

这意味着方法setCampaignIndex的接收方可能是slice而不是指向切片的指针。更改将应用​​于呼叫者。

func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) {

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