Rumah >pembangunan bahagian belakang >Golang >Adakah Penukaran Jenis Alias Go Mencipta Salinan?
Adakah Penetapan Antara Alias Mencetuskan Penyalinan dalam Go?
Go membenarkan takrifan jenis tersuai menggunakan alias. Kebimbangan timbul sama ada penukaran antara jenis alias ini menghasilkan salinan atau hanya perubahan struktur.
Pertimbangkan contoh ini:
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?
Jawapan:
Menurut peraturan penukaran Go, penukaran tidak tetap antara jenis angka atau rentetan mungkin dikenakan kos masa jalan kerana perubahan perwakilan. Walau bagaimanapun, semua penukaran lain, seperti antara alias, mengekalkan perwakilan asal tanpa membuat salinan.
Oleh itu, kedua-dua ms dan s2 bukanlah salinan penuh s tetapi merujuk kepada nilai asas yang sama .
Kesan pada Fungsi Panggilan:
Apabila menghantar nilai kepada fungsi, salinan biasanya dibuat. Walau bagaimanapun, ini tidak berlaku untuk jenis alias. Menetapkan nilai ditaip alias kepada parameter fungsi tidak mencetuskan penyalinan:
func foo(s MyString){ ... } foo(ms) // No copy is made when passing ms to foo()
Ringkasnya, sementara penukaran antara jenis alias tidak mencipta salinan nilai asas, prinsip ini tidak meluas kepada menghantar nilai kepada fungsi di mana salinan biasanya dibuat.
Atas ialah kandungan terperinci Adakah Penukaran Jenis Alias Go Mencipta Salinan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!