Adakah String dan Rune Slices Setara dalam Range Gelung?
Kebijaksanaan konvensional mencadangkan bahawa mengulangi rentetan dan hirisan rune yang sepadan menggunakan gelung julat akan membuahkan hasil yang sama. Walau bagaimanapun, andaian ini tidak tepat sepenuhnya.
Perbezaan dalam Gelung Julat
Apabila mengulangi rentetan menggunakan sintaks julat:
<code class="go">for _, s := range str</code>
Sebaliknya, apabila lelaran pada kepingan rune (cth., []rune(str)):
<code class="go">for _, s := range []rune(str)</code>
Implikasi
Perbezaan ini menjadi jelas apabila berfungsi dengan aksara berbilangbait. Dalam kes rentetan, indeks i boleh melangkau berbilang bait untuk mengambil kira pengekodan panjang pembolehubah bagi aksara UTF-8. Tingkah laku ini boleh membawa kepada tingkah laku yang tidak dijangka apabila mengubah suai kandungan rentetan melalui pengindeksan.
Rune Slices sebagai Pilihan Pilihan
Untuk mengelakkan perangkap pengindeksan ini dan memastikan manipulasi aksara yang tepat, ia biasanya disyorkan untuk menggunakan kepingan rune dan bukannya rentetan untuk operasi sedemikian. Potongan Rune menyediakan akses terus kepada aksara dan menghapuskan kemungkinan komplikasi yang timbul daripada pengekodan berbilangbait.
Pengecualian Gelung Julat
Walau bagaimanapun, perlu diperhatikan bahawa gelung julat menyediakan pengecualian kepada peraturan ini. Apabila melelaran pada rentetan menggunakan sintaks julat, indeks i mewakili kedudukan bait, manakala pembolehubah julat s masih memegang rune UTF-8. Ini membenarkan operasi peringkat rentetan dan aksara dalam satu gelung. Tingkah laku ini unik untuk julat gelung atas rentetan dan sering digunakan untuk tugas seperti pengiraan aksara atau pemprosesan Unikod.
Atas ialah kandungan terperinci Adakah String dan Rune Slices Sama dalam Range Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!