例如:
package main
import "fmt"
type Test struct {
elems []string
}
func main() {
initial := Test{
elems: make([]string, 0),
}
initial.elems = append(initial.elems, "apple")
fmt.Println(initial.elems) // #1 [apple]
s := make([]Test, 0)
s = append(s, initial)
initial.elems = append(initial.elems, "bannana")
fmt.Println(initial.elems) // #2 [apple bannana]
fmt.Println(s[0].elems) // #3 [apple]
second := s[0]
second.elems = append(second.elems, "carrot")
fmt.Println(second.elems) // #4 [apple bannana]
}
我正在寻求帮助来理解打印语句 #3 和 #4。在#3 中我期待[apple bannana],在#4 中我期待[apple bannana carrot]。
据我了解,elems作为切片的字段会自动通过引用传递,因此我在上面的代码块中所做的每个追加都应该修改底层数组。但是,显然并非如此。
initial所以,我的问题是:当它被插入到一个使它不起作用的切片中时会发生什么?此外,如何编写此代码才能在 print 语句 #4 中获得预期结果?
翻翻过去那场雪
BIG阳
相关分类