我很好奇为什么Golang不提供[]byte(*string)方法。从性能的角度来看,是否不会[]byte(string)复制输入参数并增加成本(尽管由于字符串是不可变的,所以这看起来很奇怪,为什么要复制它们)?
[]byte(*string)
[]byte(string)
我是Go的新手,不胜感激。
[]byte("something")不是函数(或方法)调用,而是类型转换。
[]byte("something")
类型转换“本身”不会复制该值。但是将a转换string为a []byte确实需要,因为结果字节片是 可变的 ,并且如果不进行复制,则可以修改/更改 不可变 的string值(的内容string),它必须为“ 规范:字符串类型”部分规定: __
string
[]byte
字符串是不可变的:一旦创建,就无法更改字符串的内容。
请注意,在极少数情况下,string<=> []byte转换不会生成副本,因为编译器已对其进行了“优化”优化。当有证据证明不可变string不会/不会最终被修改时,这是罕见的“硬编码”情况。
这样的示例从键类型为的地图中查找值string,然后使用将[]byte转换为string当然(source)的索引来索引该地图:
key := []byte("some key") var m map[string]T // ... v, ok := m[string(key)] // Copying key here is optimized away
另一个优化是在string将显式转换为字节片的a的字节范围内时:
s := "something" for i, v := range []byte(s) { // Copying s is optimized away // ... }
(请注意,如果不进行转换,for range它将rune在字符串的s上而不是在其UTF8编码的字节上进行迭代。)
for range
rune