问题:
您需要转换字符串到字节切片,而不会导致内存复制的性能损失,特别是在处理大型数据集时。
答案:
第 1 步:了解内存复制问题
Go 中的字符串是不可变的,这意味着它们不能就地修改。因此,使用 []byte(string) 语法将字符串转换为字节切片会产生内存副本。
第 2 步:使用 Unsafe
防止内存复制复制,可以采用不安全的操作。 unsafe String 函数可用于检索指向底层字符串数据的指针。
<code class="go">import "unsafe" func unsafeGetBytes(s string) []byte { return (*[0x7fff0000]byte)(unsafe.Pointer( (*reflect.StringHeader)(unsafe.Pointer(&s)).Data), )[:len(s):len(s)] }</code>
说明:
其他注意事项:
以上是如何在不进行内存复制的情况下从 Go 中的字符串中检索字节片?的详细内容。更多信息请关注PHP中文网其他相关文章!