给定两个嵌套类型
type Inner struct {
InnerVal int
}
type Outer struct {
InnerStruct *Inner
OuterVal int
}
我需要复制一个指针切片Outer
originalSlice := []*Outer{<plenty_of_items>}
本身,但在重复项中更新了字段值,包括Outer.InnerStruct.InnerVal.
为此,我创建了一个类型和长度originalSlice与originalSlice
duplicateSlice := make([]*Outer, len(originalSlice))
for _, originalItem := range originalSlice {
duplicateSlice = append(duplicateSlice, &Outer{
InnerStruct: &Inner{
InnerVal: originalItem.InnerStruct.InnerVal + 1
},
OuterVal: originalItem.OuterVal + 1,
})
}
originalSlice = append(originalSlice, duplicateSlice...)
虽然这很冗长,可以跟随周围的指针,或者我认为,当在 as 之后立即传递给函数nowDoubledSlice并通过循环访问时
someOtherSlice := make([]*types.Inner, len(nowDoubledSlice))
for i, doubledItem := range nowDoubledSlice {
someOtherSlice[i] = doubledItem.InnerStruct
}
我得到一个
运行时错误:无效的内存地址或 nil 指针取消引用
这是为什么?是否有更优雅或惯用的方法来复制指向结构的指针切片,同时更改重复项的字段?
小怪兽爱吃肉
相关分类