在golang中替换自定义类型数组的方法

时间:2014-11-24 11:41:07

标签: arrays go

我正在尝试添加或替换(或添加)自定义类型中的字段,该字段只是基于struct字段的结构数组。基本上简单,看看这里:

https://play.golang.org/p/Fb04g4Oq1C

第15行是我在努力的地方。编译器没有到达我的类型后面的数组,也不希望通过索引来处理数组值。如何实现数组的给定部分将被替换?

谢谢!

2 个答案:

答案 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}]