Go 在范围函数中按地址引用

Go 在范围函数中按地址引用,go,Go,我有一个OuterStruct结构,定义如下。我正在使用该函数初始化setup1()中的OuterStruct->InnerStruct值Name和Var1,以及setup2()中的Var1 setup2()中指定的值始终为nil,因为它是按值引用的。如何在这里使用我的地址 type InnerStruct struct { Name string Var1 *api.Var1 Var2 *ap1.Var2 } type OuterStruct struct {

我有一个
OuterStruct
结构,定义如下。我正在使用该函数初始化
setup1()
中的
OuterStruct->InnerStruct
Name和Var1
,以及
setup2()中的
Var1

setup2()中指定的值始终为
nil
,因为它是按值引用的。如何在这里使用我的地址

type InnerStruct struct {
    Name  string
    Var1  *api.Var1
    Var2  *ap1.Var2
}

type OuterStruct struct {
    opName   string
    MyData   []InnerStruct
    LogDir   string
}

func (obj *OuterStruct) Setup2() {
    for _, innerObj := range obj.InnerStruct {   // Here is the prob becuase of using refer by value
        innerObj.Var2 = callToPopulateValue()
    }
}

func Setup1() {
    innerStructList := []InnerStruct

    myStruct := InnerStruct{}
    myStruct.Name = "name1"
    myStruct.Var1 = callToPopulateValue()
    innerStructList = append(innerStructList, myStruct)

    finalStruct = &OuterStruct {
        opName: "structName",
        MyData: innerStructList,
        LogDir: "/path/for/my/logs",
    }

    finalStruct.Setup2()
}

您不能按地址访问,但可以从
范围
获取索引,并直接分配给切片:

    for i := range obj.MyData {
        obj.MyData[i].Var2 = callToPopulateValue()
    }
或者,您可以只使用指针值的一部分:

type OuterStruct struct {
    opName   string
    MyDAta   []*InnerStruct
    LogDir   string
}

func (obj *OuterStruct) Setup2() {
    for _, innerObj := range obj.MyData {
        innerObj.Var2 = callToPopulateValue()
    }
}
请发一封信。给定的代码甚至不会编译(例如,当字段为
obj.MyData
时,它引用了
obj.InnerStruct
)。在发布示例代码之前测试它。