在看了文章Go 语言的优点,缺点和令人厌恶的设计之后,受益匪浅,觉得需要总结联系一下强化一下记忆。
struct操作
- 复制
struct可以通过赋值语句来复制,如下:
虽然y是复制的x,但是修改y内array内容时候,会把x的也改变了。
import "fmt"
func main() {
x := TestFo{
Name: "foo1", Childs: []string{
"foo1-2"}}
y := x
y.Name = "boo1"
y.Childs[0] = "boo1-2"
fmt.Printf("x is %v\n", x) //x is {foo1 [boo1-2]}
fmt.Printf("y is %v\n", y) //y is {boo1 [boo1-2]}
}
type TestFo struct {
Name string
Childs []string
}
这个例子就很清晰的描述了为什么会发上上面的情况,slice,map,array都是指针,复制struct时候,如果是指针只会复制指针,不会复制指针指向的值,可以看到,打印出来的两个指针是相同的,所以复制后的struct修改指针指向的值会影响被复制的struct。
func main() {
x := TestFo{
Name: "foo1", Child: &Child{
Name: "foo1-2"}, Child2: Child{
Name: "foo1-3"}}
y := x
y.Name =</