Masalah:
Anda perlu menukar rentetan kepada kepingan bait tanpa menanggung penalti prestasi salinan memori, terutamanya untuk mengendalikan set data yang besar.
Jawapan:
Langkah 1: Fahami Salinan Memori Isu
String dalam Go tidak boleh diubah, bermakna ia tidak boleh diubah suai di tempatnya. Oleh itu, menukar rentetan kepada kepingan bait menggunakan sintaks []bait(rentetan) menghasilkan salinan memori.
Langkah 2: Menggunakan Tidak Selamat
Untuk mengelakkan ingatan menyalin, operasi yang tidak selamat boleh digunakan. Fungsi Rentetan tidak selamat boleh digunakan untuk mendapatkan penuding kepada data rentetan asas.
<code class="go">import "unsafe" func unsafeGetBytes(s string) []byte { return (*[0x7fff0000]byte)(unsafe.Pointer( (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), )[:len(s):len(s)] }</code>
Penjelasan:
Pertimbangan Tambahan:
Memampatkan set data yang besar menggunakan gzip berkemungkinan akan membayangi keuntungan prestasi daripada mengelakkan salinan memori.Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Sepotong Bait daripada Rentetan dalam Go Tanpa Menyalin Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!