golang:[] byte(string)与[] byte(* string)

golang:[] byte(string)与[] byte(* string),第1张

golang:[] byte(string)与[] byte(* string)

[]byte("something")
不是函数(或方法)调用,而是类型转换。

类型转换“本身”不会复制该值。但是将a转换

string
为a
[]byte
确实需要,因为结果字节片是 可变的
,并且如果不进行复制,则可以修改/更改 不可变
string
值(的内容
string
),它必须为“
规范:字符串类型”部分规定:
__


字符串是不可变的:一旦创建,就无法更改字符串的内容。

请注意,在极少数情况下,

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编码的字节上进行迭代。)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5125471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存