一、[]byte和string的互相转换
[]byte和string的普通互相强制转换会进行内存拷贝所以性能不是很好,可以Golang中的“黑科技”unsafe包来实现高效转换
//转换string为[]byte
func StringBytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(&s)) }
//转换[]byte为string
func BytesString(b []byte) string {
return *(*string)(unsafe.Pointer(&b)) }
二、string拼接连接
我们平时最常用也最方便的连接string方式是用+号;但每次运算都会产生一个新的字符串,所以性能比较差。
下面我分享一个我自己写的工具函数
// StringsJoin 高效连接字符串
func StringsJoin(sep string, ss ...string) string {
l := len(sep) * len(ss)
i := 0
for ; i < len(ss); i++ {
l += len(ss[i])
}
bs := make([]byte, l)
l = 0
i = 0
for ; i < len(ss); i++ {
copy(bs[l:], ss[i])
l += len(ss[i])
copy(bs[l:], sep)
l += len(sep)
}
if len(sep) > 0 && len(bs) > 0 {
bs = bs[:len(bs)-len(sep)]
}
return BytesString(bs)
}