我正在尝试添加或替换(或添加)自定义类型中的字段,该字段只是基于struct字段的结构数组。基本上简单,看看这里:
https://play.golang.org/p/Fb04g4Oq1C
第15行是我在努力的地方。编译器没有到达我的类型后面的数组,也不希望通过索引来处理数组值。如何实现数组的给定部分将被替换?谢谢!
答案 0 :(得分:3)
替换
*v[i] = n
与
(*v)[i] = n
前者意味着"将v[i]
指向",而后者"采取v
指向并i
&#39 ;元素"。
答案 1 :(得分:1)
如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}]