【问题标题】:How to print a Struct in the Http Response in go lang如何在 go lang 的 Http 响应中打印结构
【发布时间】:2016-01-19 20:40:32
【问题描述】:

我正在使用 POSTMAN 处理 go lang 中的 POST 请求。我希望以结构格式(json 数据结构)显示响应。 为了显示一个普通的字符串,我使用rw.Write([]byte(fmt.Sprintf("Hello, %s!", t.Name)))

如何在响应正文中显示 Struct?(使用 rw.write 方法)

fmt.Printf("%+v\n", m) 输出到{ID:1 Name:John Smith Address:123 Main St City:San Francisco State:CA Zip:94113 Coordinate:{Latitude:37.7917618 Longitude:-122.3943405}}

这正是我想在 Postman 响应中准确显示的内容。

提前致谢:)

【问题讨论】:

  • 你有点含蓄地回答了你自己的问题,但我会尽量在答案中让它更清楚......

标签: http struct go httpresponse postman


【解决方案1】:

不知何故,您间接回答了您的问题,但只是不知道。

您提到了这个示例,它具有您正在寻找的功能。 fmt.Sprintf 返回一个格式化字符串,而不是您已经使用的那个打印到标准输出的字符串,fmt.Printf

rw.Write([]byte(fmt.Sprintf("Hello, %s!", t.Name)))

因此,您可以使用类似下面的 fmt.Sprintf 来代替 fmt.Printf("%+v\n", m)

structString := fmt.Sprintf("%+v\n", m)
rw.Write([]byte(structString))

@JimB 建议的另一个解决方案是使用fmt.Fprintf 直接将io.Writer 作为其第一个参数,然后是格式字符串。

fmt.Fprintf(rw, "%+v\n", *m)

【讨论】:

  • 非常感谢@Will C 的投入。现在该结构按我的意愿打印,但它前面有一个“&”字符。 (好像它是一个指针)。输出为:&{ID:1 姓名:John Smith Address:123 Main St City:San Francisco State:CA Zip:94113 Coordinate:{Latitude:37.7917618 Longitude:-122.3943405}}
  • 我认为那是因为 m 恰好是一个指针,所以您可以通过 fmt.Sprintf("%+v\n", *m) 取消引用 m
  • 不需要额外的字符串转换,fmt.Fprintf(rw, "%+v\n", m)
  • 好电话! @JimB 的建议可能更好。我会更新我的答案以包含它。
猜你喜欢
  • 2021-03-20
  • 2016-01-10
  • 2022-01-21
  • 2019-04-02
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多