golang中[]byte转成string

王磊
2023-12-01

项目中 RPC 接口由于在入口直接打印 []byte 字节数组形式了,在查询日志的时候很难辨认,需要把其复制下来,再转成字符串。

比如,日志中打印的是 “[104 101 108 108 111 32 119 111 114 108 100]” 这样形式的 byte 数组,那么具体操作如下

func byte2Str()  {
	bt := []byte{104,101,108,108,111,32,119,111,114,108,100}
	fmt.Println(string(bt)) // 输出 hello world
}

当然了,逆推下,上述 byte 数组是如下方法打印的

func str2Byte()  {
	str := "hello world"
	bt := []byte(str)
	fmt.Println(bt) // 输出 [104 101 108 108 111 32 119 111 114 108 100]
}

最后,推荐下两个性能更优的转换函数

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

func BytesToString(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}
 类似资料: