sách gpt4 ăn đã đi

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

In lại 作者:IT王子 更新时间:2023-10-29 01:16:20 31 4
mua khóa gpt4 giày nike

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

câu trả lời hay nhất

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

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

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

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

这样的例子是从键类型为 sợi dây 的映射中查找一个值,然后您使用 []byte 索引该映射,转换为 字符串当然是(nguồn):

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

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

另一个优化是遍历显式转换为字节 slice 的 sợi dây 的字节:

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

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

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

31 4 0
IT王子
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress