浅拷贝只会拷贝基础类型,如int之类的。而指针类对象,切片不会重新拷贝,而只是拷贝一份指针。
import "fmt"
type Hello struct {
A int
greet *Message
C []int
}
type Message struct {
Content string
}
func (h Hello)printHello() {
fmt.Print("A=",h.A,",message=",h.greet.Content,",C=",h.C)
fmt.Println()
}
func main() {
registries:=Hello{
A: 1,
greet: &Message{
Content: "hello world",
},
C: []int{1,2,3},
}
// 执行浅拷贝(shallow copy)
back:=registries
back.A=2
back.greet.Content="change it"
back.C[0]=5
registries.printHello()
back.printHello()
}
输出结果:
A=1,message=change it,C=[5 2 3]
A=2,message=change it,C=[5 2 3]
对象直接量
那么对象直接量呢? greet *Message换成了greet Message
package main
import "fmt"
type Hello struct {
A int
greet Message // 对象直接量
C []int
}
type Message struct {
Content string
}
func (h Hello)printHello() {
fmt.Print("A=",h.A,",message=",h.greet.Content,",C=",h.C)
fmt.Println()
}
func main() {
registries:=Hello{
A: 1,
greet: Message{
Content: "hello world",
},
C: []int{1,2,3},
}
back:=registries
back.A=2
back.greet.Content="change it"
back.C[0]=5
registries.printHello()
back.printHello()
}
输出结果为:
A=1,message=hello world,C=[5 2 3]
A=2,message=change it,C=[5 2 3] // 可见对象直接量也会拷贝,而对象指针不会拷贝