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
)。在发布示例代码之前测试它。