Go语言中string与byte转换

简介

string与byte的转换是最常见的一种,通常我们会使用强转方式,但其实还有另一种更加高效的方式,本文会演示两种转换方式。

普通转换

func main() {
    fmt.Println([]byte("abcd"))
    fmt.Println(string([]byte{'1', '2', '3'}))
}

输出
[97 98 99 100]
123

高效转换

上面的转换虽然简单,但是效率不高,因为存在一次拷贝,需要新开辟内存,但其实string与[]byte的数据结构非常相似,只不过[]
byte多了一个容量大小cap,那么其实只要把值的引用地址切换一下,把cap加上就可以了

而引用地址的转换可以使用unsafe.Pointer做到,当然这个不确定高版本会不会再支持,需要注意

转换实现如下

func main() {
	fmt.Println(StringToBytes("abcd"))
	fmt.Println(BytesToString([]byte{'1', '2', '3'}))
}

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

func StringToBytes(s string) []byte {
	return *(*[]byte)(unsafe.Pointer(
		&struct {
			string
			Cap int
		}{s, len(s)},
	))
}

输出
[97 98 99 100]
123

欢迎关注,学习不迷路!

你可能感兴趣的:(golang,golang,开发语言,后端)