Go/byte

Goのbyteについて

Goにおける byte は、符号なし8ビット整数 uint8 の別名です。数値としても扱えますが、主にバイナリデータや文字列の1バイトを表す用途に用いられます。特に string 型との相互変換や、バッファ処理・ファイル入出力・ネットワーク通信など、低レベルのデータ処理でよく使用されます。

基本情報

  • byteuint8 のエイリアス(実体は uint8
  • 値の範囲は 0〜255
  • 文字列の各バイトを扱うために使われる
  • UTF-8文字列では1文字=1バイトとは限らない

他のキーワードとの組み合わせ

変数宣言との組み合わせ

var b byte = 65
c := byte('A') // → 65

定数定義との組み合わせ

const CR byte = '\r'
const LF = '\n'
const A = 'A' // byteとして扱える(ASCII範囲)

関数パラメータと戻り値

func IsAscii(b byte) bool {
    return b < 128
}

func FirstByte(s string) byte {
    return s[0]
}

型変換

b := byte(65)       // int → byte
c := 'A'            // rune
b2 := byte(c)       // rune → byte(値が255以内であることに注意)

s := "Go"
b3 := []byte(s)     // string → []byte(UTF-8バイト列)
s2 := string(b3)    // []byte → string

配列とスライス

buf := []byte{0xDE, 0xAD, 0xBE, 0xEF}

s := "ABC"
bs := []byte(s)         // → [65 66 67]

bs[0] = 'a'
s2 := string(bs)        // → "aBC"

マップ

count := map[byte]int{}

for i := 0; i < 256; i++ {
    count[byte(i)] = i
}

構造体のフィールド

type Packet struct {
    Header byte
    Body   []byte
}

ファイルIO・バッファ処理との組み合わせ

import "io"

func ReadByte(r io.Reader) (byte, error) {
    var b [1]byte
    _, err := r.Read(b[:])
    return b[0], err
}

func WriteByte(w io.Writer, b byte) error {
    _, err := w.Write([]byte{b})
    return err
}

エスケープ・リテラル

newline := byte('\n')
tab := byte('\t')
null := byte(0)

a := []byte("ABC")    // → [65 66 67]

一般的なユースケース

  1. 文字列の各バイトを処理
    s := "Hello"
    for i := 0; i < len(s); i++ {
        b := s[i]
        fmt.Printf("b: %d (%c)\n", b, b)
    }
    
  2. \[]byteによるバッファ処理
    buf := make([]byte, 1024)
    n, err := file.Read(buf)
    data := buf[:n]
    
  3. 通信データの構築・解析
    packet := []byte{0x01, 0x02, 0x03, 0x04}
    command := packet[0]
    payload := packet[1:]
    
  4. エンコード・デコード
    b64 := base64.StdEncoding.EncodeToString([]byte("secret"))
    data, err := base64.StdEncoding.DecodeString(b64)
    

byte 型は、Goにおける低レベルのデータ処理や、文字列のバイナリ表現を扱うための重要な型です。UTF-8の文字列とバイト列の違いを理解し、rune 型との使い分けを意識することで、バグの少ない安全なプログラムを構築できます。ファイルIOやネットワーク処理などでは []byte が頻出するため、byte の理解はGoプログラミングの基礎の一つです。

カテゴリ:Go
カテゴリ:Go