这个问题可能是如何将字符串分配给bytes数组的重复,但是仍然有答案,因为有更好的替代解决方案:
从转换
string到
[]byte由该规范允许的,使用一个简单的转换:
字符串类型之间的转换
[…]
- 将字符串类型的值转换为字节片的类型会产生一个片,其连续元素是字符串的字节。
因此,您可以简单地执行以下操作:
s := "some text"b := []byte(s) // b is of type []byte
但是,该
string =>[]byte转换会复制字符串内容(它必须复制,因为
strings是不可变的,而
[]byte值不是固定的),并且在
strings
大的情况下效率不高。相反,您可以创建一个
io.Reader使用方法
strings.NewReader(),该方法将从传递的内容中读取内容,而
string无需进行复制。您可以使用以下方法将此传递
io.Reader给
json.NewDeprer()并解组
Deprer.Depre():
s := `{"somekey":"somevalue"}`var result interface{}err := json.NewDeprer(strings.NewReader(s)).Depre(&result)fmt.Println(result, err)输出(在Go Playground上尝试):
map[somekey:somevalue] <nil>
注意:调用
strings.NewReader()和
json.NewDeprer()确实有一些开销,因此,如果您使用的是小型JSON文本,则可以安全地将其转换为
[]byte和使用
json.Unmarshal(),它不会变慢:
s := `{"somekey":"somevalue"}`var result interface{}err := json.Unmarshal([]byte(s), &result)fmt.Println(result, err)输出是相同的。在Go Playground上尝试一下。
注意:如果要
string通过读取一些内容
io.Reader(例如文件或网络连接)来获取JSON输入,则可以将其直接传递
io.Reader给
json.NewDeprer(),而不必先从中读取内容。


![如何将utf8字符串转换为[] byte? 如何将utf8字符串转换为[] byte?](http://www.mshxw.com/aiimages/31/415580.png)
