使用strings.Builder安全地将字节写为UTF-8字符?

时间:2018-05-06 14:43:52

标签: string go

我正在尝试做一个我必须扭转一些字符串的练习。我听说Go strings.Builder是目前创建字符串的最快方法,所以我做了以下几点:

func String(toReverse string) string {
    var reversedString strings.Builder

    for i := len(toReverse) - 1; i >= 0; i-- {
        reversedString.WriteByte(toReverse[i])
    }

    return reversedString.String()
}

问题是这不适用于这样的多字节测试用例:

  

你好,世界

成为

  

“\ u008c \u0095¸ä,olleH”

感谢。

1 个答案:

答案 0 :(得分:4)

虽然可以 - 并且默认 - 通过索引访问字符串的单个字节,但Go字符串也可以转换为符文数组,这些符文表示各个Unicode代码点。

首先,你需要将你的字符串转换为[]符文,然后迭代:

func String(toReverse string) string {
    var reversedString strings.Builder
    runes := []rune(toReverse)

    for i := len(runes) - 1; i >= 0; i-- {
        reversedString.WriteRune(runes[i])
    }

    return reversedString.String()
}

请参阅https://play.golang.org/p/WYn_MGAGw_x了解即时演示。