Memahami Perbezaan Antara Rune dan Byte Ranging dalam Rentetan dalam Go
Semasa mengulangi rentetan dalam Go menggunakan klausa julat, anda boleh menghadapi dua jenis data: rune dan bait. Ini boleh mengelirukan, jadi mari kita mendalami butiran mengapa ini berlaku.
Menurut definisi bahasa Go, rentetan ialah jujukan bait dan elemen individunya boleh diakses oleh indeksnya menggunakan str[index] . Walau bagaimanapun, apabila anda melingkari rentetan menggunakan untuk julat, aksara yang diambil adalah daripada jenis rune.
Perbezaan ini timbul daripada takrifan klausa julat, yang membenarkan lelaran ke atas titik kod (aksara Unikod) dalam rentetan . Setiap titik kod terdiri daripada satu atau lebih bait, bergantung pada pengekodan aksara. Klausa julat berulang pada bait permulaan titik kod ini, memberikan nilai rune yang sepadan sebagai elemen kedua dalam tuple.
Jika anda menemui urutan UTF-8 yang tidak sah semasa lelaran, nilai kedua ialah Aksara gantian Unikod (0xFFFD), dan lelaran akan maju dengan satu bait.
Untuk melelaran ke atas bait individu rentetan, anda boleh menggunakan yang berikut alternatif:
Gelung Bait Manual:
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
Menukar kepada Bait Slice:
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
Walaupun julat atas bait rentetan adalah kurang ringkas, ia menyediakan akses kepada nilai bait mentah, yang mungkin diperlukan dalam senario tertentu. Dengan memahami perbezaan antara rune dan julat bait, anda boleh memanipulasi rentetan dalam Go dengan berkesan untuk memenuhi keperluan yang anda inginkan.
Atas ialah kandungan terperinci Go Strings: Rune vs. Byte Iteration: Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!