gpt4 book ai didi

json - 将 io.ReadCloser 转换为字节数组的最有效方法

转载 作者:IT老高 更新时间:2023-10-28 13:06:58 26 4
gpt4 key购买 nike

我有一个非常简单的 Go 网络服务器。它的工作是接收入站 json 有效负载。然后它将有效负载发布到一个或多个需要字节数组的服务。无需检查有效负载。刚发过来。

在这种情况下,它会接收入站作业并将其发送到 Google PubSub。它可能是另一项服务 - 这并不重要。 我正在尝试找到最有效的方法来将对象转换为字节数组,而无需先对其进行解码。

为什么?在一台服务器上解码和转换为 JSON 似乎有点浪费,只是稍后解码它。另外,我不想在两个包中维护两个相同的结构。

如何将 io.ReadCloser 转换为字节数组,所以我只需要解码一次。我试过这样的答案,但也不认为这是最有效的方法:

From io.Reader to string in Go

我的 http 服务器代码如下所示:

func Collect(d DbManager) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")

code := 422
obj := Report{}
response := Response{}
response.Message = "Invalid request"

decoder := json.NewDecoder(r.Body)
decoder.Decode(&obj)

if obj.Device.MachineType != "" {
msg,_ := json.Marshal(obj)
if d.Publish(msg, *Topic) {
code = 200
}
response.Message = "Ok"
}

a, _ := json.Marshal(response)
w.WriteHeader(code)
w.Write(a)
return
})
}

最佳答案

您通过读取将 Reader 转换为字节。没有真正更有效的方法来做到这一点。

body, err := ioutil.ReadAll(r.Body)

如果您无条件地将字节从 io.Reader 传输到 io.Writer,您可以使用 io.Copy

关于json - 将 io.ReadCloser 转换为字节数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39945968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com