Back to questions
Senior
7
Расскажите про byte и rune в Go, в чём разница, и приведите пример с реверсом строки.
Companies where asked
Алабуга
Answer from AI
sobes.tech AI
В Go byte — это синоним uint8, используется для представления одного байта данных, часто для ASCII-символов. rune — это синоним int32, представляет Unicode-кодовую точку, то есть символ в кодировке UTF-8.
Разница в том, что byte — это просто байт, а rune — символ, который может занимать несколько байт в UTF-8.
Пример реверса строки с учётом Unicode:
package main
import "fmt"
func reverse(s string) string {
runes := []rune(s) // преобразуем строку в срез рун
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func main() {
s := "Привет, мир!"
fmt.Println(reverse(s)) // !рим ,тевирП
}
Так мы корректно обрабатываем многобайтовые символы, в отличие от реверса по байтам, который может сломать UTF-8.