Что такое тип byte?go-35

Что такое byte?

byte в Go — это псевдоним для uint8 (беззнаковое 8-битное целое число), используемый для работы с бинарными данными и ASCII-символами. Это базовый строительный блок для обработки сырых данных и текста в кодировке ASCII/UTF-8.

var b byte = 65 // Эквивалентно uint8

Основные характеристики

  1. Размер: 1 байт (8 бит)
  2. Диапазон значений: 0-255
  3. Использование:
    • Обработка бинарных данных
    • Работа с ASCII-символами
    • Чтение/запись потоков данных

Сравнение с rune

Характеристика byte (uint8) rune (int32) Размер 1 байт 4 байта Диапазон 0-255 Любые символы Unicode Основное использование Бинарные данные, ASCII Unicode текст

Основные операции с byte

1. Литералы

var (
    asciiByte byte = 'A'  // ASCII символ
    rawByte   byte = 65   // Числовое значение
    hexByte   byte = 0x41 // Шестнадцатеричное
)

2. Преобразование в строку

b := byte(72)
s := string(b) // "H"

3. Работа с бинарными данными

data := []byte{72, 101, 108, 108, 111} // "Hello" в ASCII

Практические примеры использования

Чтение файла побайтно

file, _ := os.Open("data.bin")
defer file.Close()

buf := make([]byte, 1024)
n, _ := file.Read(buf)
fmt.Printf("Read %d bytes\n", n)

Обработка ASCII строки

func ToUpperASCII(s string) string {
    result := make([]byte, len(s))
    for i := 0; i < len(s); i++ {
        c := s[i]
        if c >= 'a' && c <= 'z' {
            c -= 32
        }
        result[i] = c
    }
    return string(result)
}

Хеширование данных

func CalculateMD5(data []byte) string {
    hasher := md5.New()
    hasher.Write(data)
    return hex.EncodeToString(hasher.Sum(nil))
}

Особенности работы

  1. Переполнение:

    var b byte = 255
    b++ // 0 (переполнение без паники)
    
  2. Преобразование типов:

    i := 300
    b := byte(i) // 44 (потеря старших битов)
    
  3. Сравнение с rune:

    var b byte = 'A'
    var r rune = 'A'
    fmt.Println(b == byte(r)) // true
    

Резюмируем

  • byte — это алиас для uint8 (1 байт)
  • Основные применения:
    • Обработка бинарных данных
    • Работа с ASCII-символами
    • Чтение/запись файлов
    • Сетевые протоколы
  • Преимущества:
    • Эффективное использование памяти
    • Прямой доступ к сырым данным
    • Стандартный тип для ввода-вывода
  • Ограничения:
    • Не подходит для Unicode (используйте rune)
    • Ограниченный диапазон значений (0-255)
  • Важная роль в:
    • Криптографии
    • Сетевом программировании
    • Обработке файловых форматов