Rumah >pembangunan bahagian belakang >Golang >Adakah Penukaran Jenis Alias ​​Go Mencipta Salinan?

Adakah Penukaran Jenis Alias ​​Go Mencipta Salinan?

DDD
DDDasal
2024-12-23 04:52:14735semak imbas

Does Go's Alias Type Conversion Create Copies?

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!

Kenyataan:
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