Go []字节到字符串转换最佳实践 [已关闭]

Go []byte to string conversion best practice [closed]

提问人:kaffarell 提问时间:10/4/2022 更新时间:10/4/2022 访问量:346

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

去年关闭。

在网上,我看到了两种在 Go 中将字节数组转换为字符串的方法。
方法1:

func convert(myBytes byte[]) string {
   myString := string(myBytes[:])
   return myString
}

方法2:

func convert(b []byte) string {
    return *((*string)(unsafe.Pointer(&b)))
}

有何不同?哪个更快?我应该使用哪一个?

Go 指针 切片

评论

0赞 Volker 10/4/2022
切勿使用不安全的使用。

答:

4赞 Burak Serdar 10/4/2022 #1

第一种形式将字节切片复制到新数组,并创建一个指向该数组的字符串。第二个创建一个指向给定字节切片的字符串。

第一个是安全的,但有一个复制操作。第二个是不安全的,如果你修改给定字节片的内容,程序就会因难以诊断的错误而中断,因为字符串应该是不可变的。但它没有复制操作。

这不太可能是一个瓶颈。阵列复制是一项快速操作。使用第一个版本。