Goのbyteとstringについて
備忘録的なメモ
byte型とは
- uint8のシノニム
- uint8は8bit(1byte)の整数(0~255)
string型とは
- immutableなバイト型のスライス
文字列の連結
- 文字列は
+=
で連結できるが、連結の度にメモリ割り当てを行うため効率が悪い strings.Builder
やbytes.Buffer
を用いることで効率的に文字列連結ができるbytes.Buffer
はString
メソッド呼び出し時にメモリコピーが走るが、strigns.Builder
は発生しない(内部的にunsafe.Pointer
を使っている)
s1 := "hello " s1 += "world" fmt.Println(s1) // hello world var b strings.Builder b.WriteString("hello ") b.WriteString("world") fmt.Println(b.String()) // hello world
byteとstringの変換
stringとbyteはキャストにより相互に変換できる
b := []byte("hoge") fmt.Println(b) // [104 111 103 101] s := string(b) fmt.Println(s) // hoge
ただし、変換の際に文字列データのコピー(新しい文字列領域の確保)が発生してしまう