首页  >  文章  >  后端开发  >  如何访问 Go 字符串中的字节和符文?

如何访问 Go 字符串中的字节和符文?

Barbara Streisand
Barbara Streisand原创
2024-11-19 03:39:02565浏览

How do you access bytes and runes in Go strings?

Go 字符串中的字节访问和转换

在 Go 中,字符串存储 UTF-8 编码的字节,而不是字符或符文。访问字符串的元素(表示为 str[i])会返回一个字节(byte 或 uint8),而不是将其转换为符文。

当使用 for ... range 构造迭代字符串时,您可以可以访问字节或符文。索引字符串(例如 str[i])直接访问字节,而没有转换的循环(for i := range str)则迭代符文。

性能注意事项

使用 []byte(str) 将字符串转换为字节切片并不执行实际的复制;它已经被优化掉了。因此,所提供的两种方法之间没有性能差异:

str := "large text"
for i := range str {
  // use str[i]
}
str := "large text"
str2 := []byte(str)
for _, s := range str2 {
  // use s
}

但是,为了获得最大性能和代码清晰度,建议使用与代码意图相匹配的方法:

  • 如果您特别需要访问字节,请使用第一种方法迭代字节。
  • 使用第二种方法迭代符文如果您需要访问字符,请使用此方法。

字符迭代

在字符串中迭代符文字符时,请务必注意多字节字符,例如Unicode 字符可以使用底层 UTF-8 编码中的多个字节来表示。 for ... range str 语法会自动处理此问题,在每次迭代时返回字节索引和字符(符文)值。

其他资源

  • [ Go 博客:字符串、字节、符文和字符Go](https://blog.golang.org/strings)
  • [golang: []byte(string) vs []byte(*string)](https://go.dev/issue/ 22847)

以上是如何访问 Go 字符串中的字节和符文?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn