圍棋串嘗試在概念上是一個只讀切片只讀字節組。該字節數組的編碼沒有被指定,但字符串常量將是UTF-8,並且在其他字符串中使用UTF-8是推薦的方法。
Go提供了訪問UTF-8作爲unicode代碼點(或go-speak中的符文)的便利功能。字符串上的範圍循環將爲您執行utf8解碼。轉換爲[]符文會給你一個符文切片,即按順序的unicode碼點。這些好吃的東西只能用於UTF-8編碼的字符串/字節數組。我強烈建議在內部使用UTF-8。
一個例子:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadString('\n')
println("non-range loop - bytes")
for i := 0; i < len(input); i++ {
fmt.Printf("%d %d %[2]x\n", i, input[i])
}
println("range-loop - runes")
for idx, r := range input {
fmt.Printf("%d %d %[2]c\n", idx, r)
}
println("converted to rune slice")
rs := []rune(input)
fmt.Printf("%#v\n", rs)
}
隨着輸入:X E X
non-range loop - bytes
0 88 58
1 32 20
2 195 c3
3 169 a9
4 32 20
5 88 58
6 10 a
range-loop - runes
0 88 X
1 32
2 233 é
4 32
5 88 X
6 10
converted to rune slice
[]int32{88, 32, 233, 32, 88, 10}
它做的工作,但符不支持索引,這就是爲什麼它是一個字符串。 – Jackenn
「不支持索引」是否意味着您不能將它用作散列表中的鍵?如果可以的話,發佈更多的代碼並解釋你想做什麼。也許我可以幫忙。 –
我想我理解你的關心。查看我的編輯。 –