이동 문자열의
이
str := "Hello, 世界"
for _, rune := range(str) {
fmt.Printf("%x \n", rune)
}
봅니다 개념적으로 읽기 전용 된 ByteArray에 대한 읽기 전용 슬라이스입니다. 해당 bytearray의 인코딩은 지정되지 않지만 문자열 상수는 UTF-8이며 다른 문자열에서 UTF-8을 사용하는 것이 좋습니다.
Go는 UTF-8에 유니 코드 코드 포인트 (또는 이동 중에있는 룬 문자)로 액세스하기위한 편리한 기능을 제공합니다. 문자열에 대한 범위 루프는 utf8 디코딩을 수행합니다. [] 룬으로 변환하면 룬 슬라이스 즉 유니 코드 코드 포인트가 순서대로 제공됩니다. 이러한 기능은 UTF-8로 인코딩 된 문자열/bytearrays에서만 작동합니다. 나는 내부적으로 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 é 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
"색인 생성을 지원하지 않습니다"라는 말은 해시 테이블의 키로 사용할 수 없다는 의미입니까? 가능한 경우 더 많은 코드를 게시하고 원하는 것을 설명하십시오. 아마 내가 도울 수있어. –
귀하의 우려를 이해한다고 생각합니다. 내 편집을 참조하십시오. –