首頁 > 後端開發 > Golang > Go的別名型別轉換會建立副本嗎?

Go的別名型別轉換會建立副本嗎?

DDD
發布: 2024-12-23 04:52:14
原創
733 人瀏覽過

Does Go's Alias Type Conversion Create Copies?

別名之間的賦值會觸發 Go 中的複製嗎?

Go 允許使用別名定義自訂類型。人們擔心這些別名類型之間的轉換是否會導致副本或只是結構變化。

考慮這個例子:

type MyString string 
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)

// Are ms or s2 a full copy of s?
登入後複製

答案:

根據Go的轉換規則,數字類型或字串之間的非常量轉換可能會因表示變化而產生運行時成本。然而,所有其他轉換,例如別名之間的轉換,保留原始表示而不建立副本

因此,ms 和s2 都不是s 的完整副本,而是引用相同的基礎值.

對函數呼叫的影響:

傳遞值時為了實現功能,通常會建立副本。但是,這不適用於別名類型。將別名類型的值指派給函數參數不會觸發複製:

func foo(s MyString){
  ...
}
foo(ms) // No copy is made when passing ms to foo()
登入後複製

總之,雖然別名類型之間的轉換不會建立基礎值的副本,但此原則並不適用於將值傳遞給通常進行複印的功能。

以上是Go的別名型別轉換會建立副本嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板