2013-08-08 14 views

Odpowiedz

20

Zobacz ten przykład z Effective Go:

for pos, char := range "日本語" { 
    fmt.Printf("character %c starts at byte position %d\n", char, pos) 
} 

Drukuje:

character 日 starts at byte position 0 
character 本 starts at byte position 3 
character 語 starts at byte position 6 

ciągów, zakres ma więcej pracy dla ciebie, wyrwanie się poszczególne punktów kodowych Unicode analizując UTF-8.

3

Na przykład:

package main 

import "fmt" 

func main() { 
     for i, rune := range "Hello, 世界" { 
       fmt.Printf("%d: %c\n", i, rune) 
     } 
} 

Playground


wyjściowa:

0: H 
1: e 
2: l 
3: l 
4: o 
5: , 
6: 
7: 世 
10: 界 
1

Aby odzwierciedlić przykład podany w golang.org, Go pozwala łatwo przekonwertować ciąg kawałek r Unes a następnie iteracyjne nad tym, jak chciał pierwotnie:

runes := []rune("Hello, 世界") 
for i := 0; i < len(runes) ; i++ { 
    fmt.Printf("Rune %v is '%c'\n", i, runes[i]) 
} 

Oczywiście, możemy również użyć operatora zakresu jak w innych przykładach tutaj, ale tym bardziej uważnie śledzi oryginalną składnię. W każdym razie, to wyjście będzie:

Rune 0 is 'H' 
Rune 1 is 'e' 
Rune 2 is 'l' 
Rune 3 is 'l' 
Rune 4 is 'o' 
Rune 5 is ',' 
Rune 6 is ' ' 
Rune 7 is '世' 
Rune 8 is '界' 

Należy pamiętać, że od rodzaju rune jest aliasem dla int32, musimy użyć %c zamiast zwykłej %v w rachunku Printf lub zobaczymy reprezentację liczba całkowita Kodowy kod Unicode (patrz A Tour of Go).

Powiązane problemy