go语言中,经常会碰到string和byte之间的转换,如果用强制类型转化,可能会涉及到内容拷贝以及背后的gc消耗。这里介绍个小技巧,直接上代码:
func String2Bytes(s string) []byte {
x := (*[2]uintptr)(unsafe.Pointer(&s))
h := [3]uintptr{x[0], x[1], x[1]}
return *(*[]byte)(unsafe.Pointer(&h))
}
func Bytes2String(b []byte) string { return *(*string)(unsafe.Pointer(&b))}
曾经碰到在调试的时候,程序会报错,但是执行起来,应该没有问题。
如有错误,欢迎指正。
本文暂时没有评论,来添加一个吧(●'◡'●)