Goのbyteとstringについて

備忘録的なメモ

byte型とは

  • uint8のシノニム
  • uint8は8bit(1byte)の整数(0~255)

string型とは

  • immutableなバイト型のスライス

文字列の連結

  • 文字列は+=で連結できるが、連結の度にメモリ割り当てを行うため効率が悪い
  • strings.Builderbytes.Bufferを用いることで効率的に文字列連結ができる
  • bytes.BufferStringメソッド呼び出し時にメモリコピーが走るが、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

ただし、変換の際に文字列データのコピー(新しい文字列領域の確保)が発生してしまう