第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Golang中復制結構?

如何在Golang中復制結構?

Go
慕妹3146593 2021-04-10 14:15:14
我想復制一個對象,以使我擁有兩個具有兩個不同內(nèi)存地址的相同對象。我對此的第一次嘗試失敗了:aa := a assert.NotEqual(t, &a, &aa, "Copied items should not be the same object.") // Test fails我可以解決這個問題,使其真正復制該結構嗎?這個結構沒有什么特別的。
查看完整描述

3 回答

?
哆啦的時光機

TA貢獻1779條經(jīng)驗 獲得超6個贊

在Go語言中,原始類型和僅包含原始類型的結構按值復制,因此您可以通過簡單地分配給新變量(或從函數(shù)返回)來復制它們。例如:


type Person struct{

  Name string

  Age  int

}


alice1 := Person{"Alice", 30}

alice2 := alice1

fmt.Println(alice1 == alice2)   // => true, they have the same field values

fmt.Println(&alice1 == &alice2) // => false, they have different addresses


alice2.Age += 10

fmt.Println(alice1 == alice2)   // => false, now they have different field values

請注意,正如評論者所提到的,示例中的混亂很可能是由于所使用的測試庫的語義所致。


如果您的結構恰好包含數(shù)組,切片或指針,那么除非您希望在副本之間保留引用,否則您將需要對所引用對象執(zhí)行深層副本。Golang不提供內(nèi)置的深層復制功能,因此您必須實現(xiàn)自己的深層復制功能或使用提供它的許多免費可用庫之一。


查看完整回答
反對 回復 2021-04-19
?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

您可以使用帶有按值傳遞的函數(shù),并根據(jù)需要返回未更改或更改的參數(shù)。


使用上面的結構:


func main() {

    copyOf := func(y Person) Person {

        y.name = "Polonius"

        y.address = append(y.address, Address{

            city:  "other city",

            state: "other state",

        })

        return y

    }


    p := Person{

        age:  20,

        name: "Jack",

        address: []Address{

            {

                city:  "city1",

                state: "state1",

            }, {

                city:  "city2",

                state: "state2",

            },

        },

    }


    q := copyOf(p)


    fmt.Printf("Orig %v, \naddrss: %p \n\n", p, &p)

    fmt.Printf("Copy %v, \naddress: %p\n\n", q, &q)

}


查看完整回答
反對 回復 2021-04-19
  • 3 回答
  • 0 關注
  • 434 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號