Did*_*zia 19

首先,您可能需要阅读https://blog.golang.org/strings 它将回答您的部分问题.

Go中的字符串可以包含任意字节.当你写str [i]时,结果是一个字节,索引总是一个字节数.

大多数情况下,字符串以UTF-8编码.您有多种方法可以在字符串中处理UTF-8编码.

例如,您可以使用for ... range语句按符号迭代字符串符文.

var first rune
for _,c := range str {
    first = c
    break
}
// first now contains the first rune of the string

您还可以使用unicode/utf8包.例如:

r, size := utf8.DecodeRuneInString(str)
// r contains the first rune of the string
// size is the size of the rune in bytes

如果字符串是以UTF-8编码的,则没有直接的方法来访问字符串的第n个符文,因为符文的大小(以字节为单位)不是常量.如果您需要此功能,您可以轻松编写自己的辅助函数(使用for ...范围或使用unicode/utf8包).

  • 我建议如果您需要在程序中多次索引字符串的符文,请在 O(n) 中将一次转换为 []rune,然后您可以在 O(1) 时间内索引任意多次。有问题的字符串很可能在某个时候至少执行了一个 O(n) 操作(即使它只是初始分配),因此添加另一个可能不会影响程序的整体渐近运行时间。 (2认同)