Rumah > pembangunan bahagian belakang > Golang > Penukaran Jenis Alias: Adakah ia Mencipta Salinan Dalaman Data Dasar?

Penukaran Jenis Alias: Adakah ia Mencipta Salinan Dalaman Data Dasar?

Barbara Streisand
Lepaskan: 2024-12-21 16:20:10
asal
330 orang telah melayarinya

Go Alias Type Conversion: Does it Create Deep Copies of Underlying Data?

Penukaran Jenis Alias ​​dalam Go: Adakah Ia Mencipta Salinan?

Apabila bekerja dengan jenis alias dalam Go, seseorang mungkin tertanya-tanya sama ada penukaran antara alias dan jenis asasnya terhasil dalam salinan. Untuk meneroka soalan ini, mari kita rungkai satu contoh:

type MyString string
var s = "very long string"
var ms = MyString(s)
var s2 = string(ms)
Salin selepas log masuk

Soalan: Adakah ms atau s2 salinan lengkap s (seperti []bait(s) akan menjadi), atau adakah mereka hanya mewakili salinan struktur rentetan (memegang penunjuk kepada yang asal value)?

Jawapan:

Menurut spesifikasi Go pada penukaran, "semua penukaran lain hanya menukar jenis tetapi bukan perwakilan x." Oleh itu, menukar kepada dan daripada jenis asas jenis tersuai tidak menghasilkan salinan. Dalam kes ini, ms dan s2 bukanlah salinan s tetapi hanya representasi berbeza bagi nilai asas yang sama.

Melalukan Jenis Alias ​​kepada Fungsi:

Apabila menghantar alias taip ke fungsi, salinan nilai dibuat. Walau bagaimanapun, salinan itu sebenarnya tidak akan mencipta contoh baharu bagi nilai asas. Contohnya:

func foo(s MyString) {
  ...
}
foo(ms(s))  // No copy is made here
Salin selepas log masuk

Di sini, salinan yang dihantar ke fungsi adalah daripada deskriptor MyString, bukan rentetan sebenar yang dirujuk oleh ms.

Atas ialah kandungan terperinci Penukaran Jenis Alias: Adakah ia Mencipta Salinan Dalaman Data Dasar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan