🦁
[備忘録]Goのbyteは数字で比較出来る
Goのbyteはそれすなわちuint8のため、数字として比較する事が出来る。
これを利用して、UTF-8な文字列をbyteとして処理する際に数字として比較する事で、何Byteの文字なのか判断出来る。
main.go
func main() {
str := "aあb呂-🙏"
pos := 0
for pos < len(str) {
if str[pos] <= 127 {
// 1Byte
fmt.Println(string(str[pos]))
pos = pos + 1
} else if str[pos] >= 194 && str[pos] <= 223 {
// 2Byte
fmt.Println(string(str[pos : pos+2]))
pos = pos + 2
} else if str[pos] >= 224 && str[pos] <= 239 {
// 3Byte
fmt.Println(string(str[pos : pos+3]))
pos = pos + 3
} else if str[pos] == 240 {
// 4Byte
fmt.Println(string(str[pos : pos+4]))
pos = pos + 4
} else {
panic("unknown bit pattern")
}
}
}
実行結果
> go run main.go
a
あ
b
呂
-
🙏
>
Discussion