12345678910111213141516171819202122232425262728 | type Dog struct { name string color string age int8 kind string}func main() {//1、struct是值类型,默认的复制就是深拷贝 d1 := Dog{"豆豆", "黑色", 2, "二哈"} fmt.Printf("d1: %T , %v , %p \n", d1, d1, &d1) d2 := d1 //值拷贝 fmt.Printf("d2: %T , %v , %p \n", d2, d2, &d2) d2.name = "毛毛" fmt.Println("d2修改后:", d2) fmt.Println("d1:", d1) fmt.Println("------------------")//2、直接赋值指针地址 d3 := &d1 fmt.Printf("d3: %T , %v , %p \n", d3, d3, d3) d3.name = "球球" d3.color = "白色" d3.kind = "萨摩耶" fmt.Println("d3修改后:", d3) fmt.Println("d1:", d1) fmt.Println("------------------") |
123456789101112131415161718192021222324252627282930313233343536373839404142 | package mainimport "fmt"type Flower struct { name, color string}func main() {//1、结构体作为参数的用法 f1 := Flower{"玫瑰", "红"} fmt.Printf("f1: %T , %v , %p \n" , f1 , f1 , &f1) fmt.Println("----------------------")//将结构体对象作为参数 changeInfo1(f1) fmt.Printf("f1: %T , %v , %p \n" , f1 , f1 , &f1) fmt.Println("----------------------")// 将结构体指针作为参数 changeInfo2(&f1) fmt.Printf("f1: %T , %v , %p \n" , f1 , f1 , &f1) fmt.Println("----------------------")}//返回结构体对象func getFlower1() (f Flower){ f = Flower{"牡丹", "白"} fmt.Printf("函数getFlower1内f: %T , %v , %p \n" , f , f , &f)return}//返回结构体指针func getFlower2() (f *Flower){//f = &Flower{"芙蓉", "红"} temp := Flower{"芙蓉", "红"} fmt.Printf("函数getFlower2内temp: %T , %v , %p \n" , temp , temp , &temp) f = &temp fmt.Printf("函数getFlower2内f: %T , %v , %p , %p \n" , f , f , f , &f)return} |
12345678910111213141516171819202122232425262728293031323334353637383940 | package mainimport "fmt"type Flower struct { name, color string}func main() {//2、结构体作为返回值的用法//结构体对象作为返回值 f2 := getFlower1() f3 := getFlower1() fmt.Println("更改前" , f2 , f3) f2.name = "杏花" fmt.Println("更改后" , f2 , f3)//结构体指针作为返回值 f4 := getFlower2() f5 := getFlower2() fmt.Println("更改前" , f4 , f5) f4.name = "桃花" fmt.Println("更改后" , f4 , f5)}//返回结构体对象func getFlower1() (f Flower){ f = Flower{"牡丹", "白"} fmt.Printf("函数getFlower1内f: %T , %v , %p \n" , f , f , &f)return}//返回结构体指针func getFlower2() (f *Flower){//f = &Flower{"芙蓉", "红"} temp := Flower{"芙蓉", "红"} fmt.Printf("函数getFlower2内temp: %T , %v , %p \n" , temp , temp , &temp) f = &temp fmt.Printf("函数getFlower2内f: %T , %v , %p , %p \n" , f , f , f , &f)return} |
本文链接: https://dreamerjonson.com/2018/11/26/golang-16-struct-copy/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。