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)
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
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!