我正在尝试在自定义类型中添加或替换(或添加)一个字段,该字段不过是基于struct字段的结构数组。基本上简单的东西,看看这里:在golang中替换自定义类型数组的方法
https://play.golang.org/p/Fb04g4Oq1C
线15,我很努力。编译器不会到达我的类型后面的数组,并且不想通过索引寻址数组值。我怎样才能实现数组的给定部分将被替换?
谢谢!
我正在尝试在自定义类型中添加或替换(或添加)一个字段,该字段不过是基于struct字段的结构数组。基本上简单的东西,看看这里:在golang中替换自定义类型数组的方法
https://play.golang.org/p/Fb04g4Oq1C
线15,我很努力。编译器不会到达我的类型后面的数组,并且不想通过索引寻址数组值。我怎样才能实现数组的给定部分将被替换?
谢谢!
更换
*v[i] = n
与
(*v)[i] = n
前者是指 “采取什么v[i]
点”,而后者, “采取什么v
点,并采取i
“th元素”。
如this answer所述,切片已经是一种指针,将指向切片的指针完全无用。
这意味着您的代码版本使用[]
而不是指向[]
的指针工作得很好。
见this example:
func (v VarBucket) AddOrReplace(n Var) VarBucket {
for i, vars := range v {
if vars.Name == n.Name {
v[i] = n
fmt.Println("Replaced")
return v
}
}
v = append(v, n)
fmt.Println("Added")
return v
}
有了:
v_a := Var{Name: "a", Value: "A"}
v_b := Var{Name: "b", Value: "B"}
v_c := Var{Name: "a", Value: "C"}
b := VarBucket{}
b = b.AddOrReplace(v_a) // add
fmt.Printf("%v\n", b)
b = b.AddOrReplace(v_b) // add
fmt.Printf("%v\n", b)
b = b.AddOrReplace(v_c) // replace v_a
fmt.Printf("%v\n", b)
输出:
Added
[{a A}]
Added
[{a A} {b B}]
Replaced
[{a C} {b B}]