首页 > 后端开发 > Golang > 正文

如何在 Go 中高效地将 UTF-8 字符串转换为 []byte 以进行 JSON 解组?

Linda Hamilton
发布: 2024-10-30 21:50:02
原创
361 人浏览过

How to Efficiently Convert a UTF-8 String to []byte for JSON Unmarshalling in Go?

将 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!