在 go 中遍历字符串字符的最正确方法是什么

Iri*_*aki -1 string loops go

我是新手,Go我希望迭代字符串的字符

package main

import (
    "fmt"
)

func main() {
    var a string = "abcd"
    for i, c := range a {
        fmt.Printf("%d %s\n", i, c)
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望输出是

    0 a
    1 b
    2 c
    3 d
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。我究竟做错了什么?

pet*_*rSO 5

修复go vet和包fmt格式错误消息(typerune是type的别名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)
Run Code Online (Sandbox Code Playgroud)

游乐场: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)
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https : //play.golang.org/p/LFQPGZ9X5kk

输出:

0 a
1 b
2 c
3 d
Run Code Online (Sandbox Code Playgroud)

stringUTF-8 变长编码类型示例:

package main

import (
    "fmt"
)

func main() {
    var a string = "Greece ??????"
    for i, c := range a {
        fmt.Printf("%2d %c\n", i, c)
    }
}
Run Code Online (Sandbox Code Playgroud)

游乐场: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 ?
Run Code Online (Sandbox Code Playgroud)

参考:

去打包 fmt 文档

Go 博客:Go 中的字符串、字节、符文和字符