1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的“No.1”方法附加到一個(gè)nil切片,該切片保證如果提供的參數(shù)超過零,則將分配一個(gè)新的支持?jǐn)?shù)組。
您的“No.2”方法不會(huì)創(chuàng)建新切片,它只是切片參數(shù)。
如果Assign()通過傳遞現(xiàn)有切片來調(diào)用,則第二種方法將存儲它,如果其元素被修改,它將反映在存儲的切片中。
讓我們稍微修改一下您的示例以對其進(jìn)行測試:
type T1 struct {
local []string
}
func (t *T1) Assign1(param ...string) {
t.local = nil
t.local = append(t.local, param...) // No.1 <<<
}
func (t *T1) Assign2(param ...string) {
t.local = nil
t.local = param[:] // No.2 <<<
}
測試它:
t1 := &T1{}
s := []string{"a", "b", "c"}
t1.Assign1(s...)
fmt.Println(t1.local)
s[0] = "x"
fmt.Println(t1.local)
s = []string{"a", "b", "c"}
t1.Assign2(s...)
fmt.Println(t1.local)
s[0] = "x"
fmt.Println(t1.local)
輸出(在Go Playground上試試):
[a b c]
[a b c]
[a b c]
[x b c]
如您所見,使用 時(shí)Assing1(),local修改傳遞的切片不會(huì)影響切片。
使用 時(shí)Assing2(),切片的元素local反映了對原始元素所做的更改。
- 1 回答
- 0 關(guān)注
- 125 瀏覽
添加回答
舉報(bào)