我正在嘗試在自定義類型中添加或替換(或添加)一個字段,該字段不過是基於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}]