Sobes.tech
Назад к вопросам
Senior
6

Расскажите про byte и rune в Go, в чём разница, и приведите пример с реверсом строки.

Компании, где спрашивали
Алабуга

Ответ от нейросети

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.