Golang中復(fù)制結(jié)構(gòu)體,可以使用賦值語句
package main
import (
"fmt"
)
type Dog struct {
age int
name string
}
func main() {
roger := Dog{5, "Roger"}
mydog := roger
fmt.Printf("roger addr %p\n", &roger)
fmt.Printf("mydog addr %p\n", &mydog)
fmt.Println("Roger and mydog are equal structs?", roger == mydog)
mydog.name = "piggie"
fmt.Println("Roger and mydog are equal structs?", roger == mydog)
}
執(zhí)行結(jié)果
roger addr 0xc000092000
mydog addr 0xc000092020
Roger and mydog are equal structs? true
Roger and mydog are equal structs? false
可以看出碌奉,roger跟mydog在內(nèi)存中的地址不同短曾。并且對(duì)mydog修改屬性,對(duì)roger沒有影響赐劣。
但是注意嫉拐,這里的Dog結(jié)構(gòu)體中的屬性,都是值類型魁兼。如果是引用類型的話椭岩,復(fù)制的是指針,而不是具體的值。所以通過賦值語句對(duì)結(jié)構(gòu)體的拷貝判哥,是淺拷貝。如需對(duì)引用類型屬性進(jìn)行深拷貝碉考,可以通過手動(dòng)創(chuàng)建的方式塌计,或者使用實(shí)現(xiàn)了deepcopy功能的第三方包