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

时间:2019-02-10 14:37:43

标签: 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)
    }
}

我希望输出为

    0 a
    1 b
    2 c
    3 d

但不是。我在做什么错了?

1 个答案:

答案 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 α

参考文献:

Go package fmt documentation

The Go Blog: Strings, bytes, runes and characters in Go