Adakah Penukaran Antara Jenis Alias dalam Go Mendapat Salinan?
Dalam Go, jenis tersuai boleh ditakrifkan sebagai alias jenis sedia ada. Apabila menukar antara jenis alias dan jenis asasnya, adalah penting untuk memahami sama ada salinan nilai asas dibuat.
Jawapan:
Mengikut spesifikasi Go , menukar kepada dan daripada jenis asas jenis tersuai tidak mencipta salinan data baharu. Ini kerana penukaran hanya menukar jenis deskriptor, tanpa membuat sebarang pengubahsuaian kepada nilai sebenar.
Dalam contoh berikut:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s)
Kedua-dua ms dan s2 bukanlah salinan penuh s . Ia hanya salinan struktur rentetan, yang merujuk lokasi memori asas yang sama. Ini berbeza daripada menggunakan []bait(s) untuk menukar kepada tatasusunan bait, yang akan mencipta salinan baharu data.
Apabila menghantar nilai jenis alias kepada fungsi:
func foo(s MyString){ ... } foo(ms(s))
Nilai diluluskan oleh nilai, jadi salinan struktur rentetan dibuat. Walau bagaimanapun, salinan ini masih merujuk data rentetan asas yang sama seperti s. Oleh itu, perubahan yang dibuat kepada s juga akan kelihatan dalam fungsi.
Atas ialah kandungan terperinci Adakah Penukaran Jenis Alias Go Mencipta Salinan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!