让我们将string转换为[]byte:

func toBytes(s string) []byte {
  return []byte(s) // What happens here?
}

How expensive is this cast operation? Is copying performed? As far as I see in Go specification: Strings behave like slices of bytes but are immutable, this should involve at least copying to be sure subsequent slice operations will not modify our string s. What happens with reverse conversation? Does []byte <-> string conversation involve encoding/decoding, like utf8 <-> runes?

推荐答案

[]byte(s)不是演员阵容,而是conversion.有些转换与cast相同,比如uint(myIntvar),它只是重新解释位in place.不幸的是,字符串到字节片的转换并非如此.字节片是可变的,字符串(精确地说是字符串值)不是可变的.结果是对正在生成的字符串进行必要的复制(mem-alloc+内容传输).因此,是的,在某些情况下,成本可能会很高.

编辑:不执行编码转换.字符串(源)字节按原样复制到片(目标)字节.

Go相关问答推荐

如何禁用Go SRC包中的VSCode警告?

Go编译器标志-修剪路径不完全工作

困扰围棋官方巡回赛的S建议所有方法都使用同一类型的接收器

GO错误:Tim.Time未实现driver.Valuer(缺少方法值)

带有条件的for循环中缺少RETURN语句

创建使用逗号而不是加号分隔OU的CSR

埃拉托塞尼筛:加快交叉关闭倍数步骤

在Go中旋转矩阵

日志(log)文件不在 golang 的日志(log)目录中

我怎样才能改进这个嵌套逻辑以使其正常工作并提高性能

是否可以在 hyperledger-chaincode 中使用 gRPC?如果可以,我如何避免在测试网络上调用时出错?

Golang代码判断第一个词是否可以从第二个词形成

在 Go 中公开公共 JWK

使用 GO 在侧 tar 文件中提取 tar 文件的最快方法

使用 AppID 在 Windows 中启动应用程序并获取 pid

有没有办法判断值是否满足接口中定义的类型约束?

Go模板中的浮点除法

如何在 Unmarshal 中使用泛型(转到 1.18)

gob 解码器仅返回数组中的第一个元素

go routine 和接收错误或成功的通道