例子:type MyString string var s = "very long string"var ms = MyString(s)var s2 = string(s)是ms或s2的完整副本s(就像用 完成的那樣[]byte(s))?或者它們只是一個(gè)字符串結(jié)構(gòu)副本(將實(shí)際值保存在指針中)?如果我們將它傳遞給一個(gè)函數(shù)怎么辦?例如:func foo(s MyString){ ...}foo(ms(s)) // do we copy s here?
1 回答

呼如林
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
特定規(guī)則適用于數(shù)字類型之間或與字符串類型之間的(非常量)轉(zhuǎn)換。這些轉(zhuǎn)換可能會(huì)改變表示
x
并產(chǎn)生運(yùn)行時(shí)成本。所有其他轉(zhuǎn)換僅更改類型,而不更改x
.
因此,如果在自定義類型的基礎(chǔ)類型之間進(jìn)行轉(zhuǎn)換,則不會(huì)進(jìn)行復(fù)制。
當(dāng)您將值傳遞給函數(shù)或方法時(shí),會(huì)生成并傳遞一個(gè)副本。如果將 a 傳遞string
給函數(shù),則只會(huì)string
復(fù)制和傳遞描述 的結(jié)構(gòu),因?yàn)?code>strings 是不可變的。
如果你傳遞一個(gè)切片(切片也是描述符)也是如此。傳遞切片將制作切片描述符的副本,但它將引用相同的底層數(shù)組。
- 1 回答
- 0 關(guān)注
- 204 瀏覽
添加回答
舉報(bào)
0/150
提交
取消