Rune 与 Byte Ranging over String 解释
在 Go 中使用 for 循环遍历字符串时,您可能已经注意到以下差异获取的数据类型取决于您使用的方法。使用“for i, c := range s”形式对字符串进行范围搜索会产生符文类型,而使用“s[i]”等直接索引会返回字节类型。
这种差异源于底层Go 中字符串的定义,将其指定为字节序列。当您使用“s[i]”访问字符串时,您可以直接检索索引 i 处的字节值。但是,当您使用“for range”迭代字符串时,range 子句对 Unicode 代码点进行操作,这些代码点在 Go 中表示为符文。
range 对符文起作用的原因是提供一种惯用的方式迭代字符串而无需手动解码 UTF-8 序列。如果范围仅适用于字节,则您必须编写自己的自定义循环来遍历符文。
但是,您仍然可以使用以下技术访问字符串中的字节:
for i := 0; i < len(s); i++ { ... }
或
for i, b := range []byte(s) { ... }
这些替代方法使您可以在必要时灵活地显式处理字节。
在总之,在字符串的 for-range 构造中使用符文提供了一种迭代字符串的 Unicode 表示形式的便捷方法。虽然您仍然可以根据需要访问各个字节,但这种方法简化了流程,使在 Go 中操作字符串变得更容易、更直观。
以上是Go 字符串迭代中的 Rune 与 Byte:何时获取 Rune,何时获取字节?的详细内容。更多信息请关注PHP中文网其他相关文章!