我是Go
的新手,我希望迭代字符串中的字符
package main
import (
"fmt"
)
func main() {
var a string = "abcd"
for i, c := range a {
fmt.Printf("%d %s\n", i, c)
}
}
我希望输出为
0 a
1 b
2 c
3 d
但不是。我在做什么错了?
答案 0 :(得分:3)
修复go vet
和包fmt
格式的错误消息(类型rune
是类型int32
的别名)
10: Printf format %s has arg c of wrong type rune
0 %!s(int32=97)
1 %!s(int32=98)
2 %!s(int32=99)
3 %!s(int32=100)
游乐场:https://play.golang.org/p/oM9D8oNlaAO
符文是Unicode代码点(字符),而不是字符串。
不使用%c
%s
。例如,
package main
import (
"fmt"
)
func main() {
var a string = "abcd"
for i, c := range a {
fmt.Printf("%d %c\n", i, c)
}
}
游乐场:https://play.golang.org/p/LFQPGZ9X5kk
输出:
0 a
1 b
2 c
3 d
类型为string
UTF-8可变长度编码的示例:
package main
import (
"fmt"
)
func main() {
var a string = "Greece Ελλάδα"
for i, c := range a {
fmt.Printf("%2d %c\n", i, c)
}
}
游乐场:https://play.golang.org/p/Fdgg6UMXAAt
输出:
0 G
1 r
2 e
3 e
4 c
5 e
6
7 Ε
9 λ
11 λ
13 ά
15 δ
17 α
参考文献: