Go/byte
Goのbyteについて
Goにおける byte
は、符号なし8ビット整数 uint8
の別名です。数値としても扱えますが、主にバイナリデータや文字列の1バイトを表す用途に用いられます。特に string
型との相互変換や、バッファ処理・ファイル入出力・ネットワーク通信など、低レベルのデータ処理でよく使用されます。
基本情報
他のキーワードとの組み合わせ
変数宣言との組み合わせ
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]
一般的なユースケース
- 文字列の各バイトを処理
s := "Hello" for i := 0; i < len(s); i++ { b := s[i] fmt.Printf("b: %d (%c)\n", b, b) }
- \[]byteによるバッファ処理
buf := make([]byte, 1024) n, err := file.Read(buf) data := buf[:n]
- 通信データの構築・解析
packet := []byte{0x01, 0x02, 0x03, 0x04} command := packet[0] payload := packet[1:]
- エンコード・デコード
b64 := base64.StdEncoding.EncodeToString([]byte("secret")) data, err := base64.StdEncoding.DecodeString(b64)
byte
型は、Goにおける低レベルのデータ処理や、文字列のバイナリ表現を扱うための重要な型です。UTF-8の文字列とバイト列の違いを理解し、rune
型との使い分けを意識することで、バグの少ない安全なプログラムを構築できます。ファイルIOやネットワーク処理などでは []byte
が頻出するため、byte
の理解はGoプログラミングの基礎の一つです。