goの文字列比較でハマった

バッファからバイト文字をスライスに移した際に、string関数を使って文字列変換しても、スライスの余りの部分(0初期化した値)も文字変換されてしまうため、それを取り除く必要がある。

buf := make([]byte, 128) // \x00で初期化される

b, err := io.Read(buf) 
if err != nil {
    panic(err)
}

string(b) == "hello" // false

strings.TrimRight(b, "\x00") == "hello" // true