2014-11-24 178 views

回答

3

更換

*v[i] = n 

(*v)[i] = n 

前者是指 「採取什麼v[i]點」,而後者, 「採取什麼v點,並採取i「th元素」。

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