🦁

[備忘録]Goのbyteは数字で比較出来る

2024/09/26に公開

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