gpt4 book ai didi

string - []字节(字符串)与[]字节(*字符串)

转载 作者:IT王子 更新时间:2023-10-29 01:16:20 31 4
gpt4 key购买 nike

我很好奇为什么 Go 不提供 []byte(*string) 方法。从性能的角度来看,[]byte(string) 不会复制输入参数并增加更多成本(尽管这看起来很奇怪,因为字符串是不可变的,为什么要复制它们)?

最佳答案

[]byte("something") 不是函数(或方法)调用,它是类型 conversion

类型转换“本身”不会复制值。然而,将 string 转换为 []byte 确实需要,因为结果字节 slice 是可变的,如果一个副本会不被制作,你可以修改/改变 string 值(string 的内容)它是不可变的,它必须是 Spec: String types部分规定:

Strings are immutable: once created, it is impossible to change the contents of a string.

请注意,在极少数情况下,string <=> []byte 转换不会生成副本,因为它已被编译器优化“离开”。当有证据表明不可变的 string 不能/不会最终被修改时,这些是罕见的“硬编码”情况。

这样的例子是从键类型为 string 的映射中查找一个值,然后您使用 []byte 索引该映射,转换为 字符串当然是(source):

key := []byte("some key")

var m map[string]T
// ...
v, ok := m[string(key)] // Copying key here is optimized away

另一个优化是遍历显式转换为字节 slice 的 string 的字节:

s := "something"
for i, v := range []byte(s) { // Copying s is optimized away
// ...
}

(请注意,如果不进行转换,for range 将遍历字符串的 rune 而不是其 UTF8 编码字节。)

关于string - []字节(字符串)与[]字节(*字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470284/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com