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

问题描述 投票:0回答:1

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

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

方法二:

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

有什么区别?哪一个更快?我应该使用哪一个?

go pointers slice
1个回答
4
投票

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

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

这不太可能是瓶颈。数组复制是一个快速的操作。使用第一个版本。

© www.soinside.com 2019 - 2024. All rights reserved.