将 UTF-8 字符串转换为 []byte 以进行 JSON 解组
要在 Go 中解组 JSON 字符串,我们需要提供 [ ] 字节切片作为输入。如果我们只有一个 UTF-8 字符串,如何将其转换为 []byte?
简单转换以及字符串到 []byte 复制
Go 类型系统允许我们直接从字符串转换为 []byte 使用:
s := "some text" b := []byte(s) // b is type []byte
但是,此操作会创建字符串的副本,这对于大字符串来说效率较低。
使用 io.Reader 进行高效转换
另一种解决方案是使用 strings.NewReader() 创建 io.Reader:
s := `{"somekey":"somevalue"}` r := strings.NewReader(s)
然后可以传递这个 io.Reader到 json.NewDecoder() 进行解组,而不创建字符串副本:
var result interface{} err := json.NewDecoder(r).Decode(&result)
开销注意事项
使用 strings.NewReader() 和 json.NewDecoder() 有一些开销,所以对于小的 JSON 字符串,直接转换为 []byte 可能会更高效:
s := `{"somekey":"somevalue"}` var result interface{} err := json.Unmarshal([]byte(s), &result)
直接 io.Reader 输入
如果 JSON 字符串输入可用作 io.Reader(例如文件或网络连接),它可以直接传递给 json.NewDecoder():
var result interface{} err := json.NewDecoder(myReader).Decode(&result)
这消除了中间转换或复制的需要。
以上是如何在 Go 中高效地将 UTF-8 字符串转换为 []byte 以进行 JSON 解组?的详细内容。更多信息请关注PHP中文网其他相关文章!