登录
首页 >  Golang >  Go问答

将map类型数据转换为能够读取数据的 io.Reader 接口

来源:stackoverflow

时间:2024-02-25 11:42:27 309浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《将map类型数据转换为能够读取数据的 io.Reader 接口》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我的go应用程序需要发出post请求,并且地图将被放入请求正文中。

现在我首先将地图制作为 json 字符串,然后将其转换为 io.reader。

我想知道是否有任何方法可以跳过 json.marshal 步骤?

var data map[string]interface{} {
        "a": 1,
        "b": "cdef",
        ...
}

jsonData, err := json.Marshal(data)

resp, err := http.Post(
        "localhost:3000", "application/json", bytes.NewReader(jsonData))

解决方案


不,您不能跳过地图的序列化。

post 需要一个读取器,因为它想要读取字节流。映射不是字节流 - 它是内存中的数据结构。您可以使用多种方式序列化您的地图:gob、xml、json、yaml、protobuf、您的自定义格式等。这完全取决于您的服务器的期望。

如果您的服务器需要 json,您必须将其序列化为 json 并发送该 json 缓冲区。

如果您希望经常这样做,并且对 marshal 的调用感到困扰,那么将其封装到您可以调用的函数中怎么样?

另请参阅与此相关的其他问题/答案:

这是另一种方法:

package main

import (
   "bytes"
   "encoding/json"
   "net/http"
)

func main() {
   m, b := map[string]interface{}{"a": 1, "b": "cdef"}, new(bytes.Buffer)
   json.NewEncoder(b).Encode(m)
   http.Post("http://example.com", "application/json", b)
}

请注意,我们仍然需要对 json 进行编码,但一定要省略 newreader 打电话。

https://golang.org/pkg/encoding/json#Encoder.Encode

好了,本文到此结束,带大家了解了《将map类型数据转换为能够读取数据的 io.Reader 接口》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>