Goで日本語混じりのstringをそのままtruncateすると[]byte
として切りだされるのでお察しの通りになる。
s := "ああaaああ"
// 5文字目まで切りたい
fmt.Println(s[0:5]) //=> あ��
[]rune
([]int32
のalias)に変換してから必要なぶんを切り出してstringにキャストすればよい。
s := "ああaaああ"
r := []rune(s)
// 5文字目まで切りたい
fmt.Println(string(r[0:5])) //=> ああaaあ