2013-08-08 31 views

Trả lời

20

Xem ví dụ này từ Effective Go:

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

này in:

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

Đối với dây, phạm vi làm việc nhiều hơn cho bạn, phá vỡ ra từng điểm mã Unicode bằng cách phân tích các UTF-8.

3

Ví dụ:

package main 

import "fmt" 

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

Playground


Output:

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

Để phản chiếu một ví dụ được đưa ra tại golang.org, Gò phép bạn dễ dàng chuyển đổi một chuỗi để một lát r unes và sau đó lặp lại trên đó, giống như bạn muốn ban đầu:

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

Tất nhiên, chúng tôi cũng có thể sử dụng một nhà điều hành phạm vi như trong các ví dụ khác ở đây, nhưng điều này sau chặt chẽ hơn cú pháp ban đầu của bạn. Trong mọi trường hợp, điều này sẽ đầu ra:

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 '界' 

Lưu ý rằng kể từ khi loại rune là một bí danh cho int32, chúng ta phải sử dụng %c thay vì thông thường %v trong báo cáo Printf, hoặc chúng ta sẽ thấy các đại diện số nguyên của Điểm mã Unicode (xem A Tour of Go).

Các vấn đề liên quan