专栏首页飞雪无情的博客Golang Gin 实战(十)| XML渲染

Golang Gin 实战(十)| XML渲染

虽然当前基于XML的API应用不多,但是Gin也提供了便捷的XML生成,可以把这些用于需要XML的地方,比如网站的sitemap,rss订阅的atom等。

来个map试试

func main() {
	r := gin.Default()
	r.GET("/xml", func(c *gin.Context) {
		c.XML(200, gin.H{"wechat": "flysnow_org", "blog": "www.flysnow.org"})
	})
	r.Run(":8080")
}

在Gin中,要生成XML,只需要使用context.XML方法即可。以上的例子,我们运行访问浏览器http://localhost:8080/xml可以看到如下信息:

<map>
<wechat>flysnow_org</wechat>
<blog>www.flysnow.org</blog>
</map>

根节点是map,这是因为gin.H其实就是一个mapmapkey成为了xml里的节点,而mapvalue成为了xml节点的值。

自定义struct

对于自定义的struct,Gin同样可以很方便的转为XML。

func main() {
	r := gin.Default()
	r.GET("/xml", func(c *gin.Context) {
		c.XML(200, User{ID: 123, Name: "张三", Age: 20})
	})
	r.Run(":8080")
}

type User struct {
	ID   int
	Name string
	Age  int
}

这个例子和 Golang Gin 实战(八)| JSON渲染输出 非常相似,现在我们运行再通过浏览器访问看看。

<User>
<ID>123</ID>
<Name>张三</Name>
<Age>20</Age>
</User>

根节点已经变成了这个structUser,而根节点下的节点,就是User的字段。

自定义节点名字

和JSON一样,我们也可以通过字段的xml tag来自定义对应的字段的别名。

type User struct {
	ID   int    `xml:"id"`
	Name string `xml:"name"`
	Age  int    `xml:"age"`
}

只需要改成这样,我们再打开浏览器访问,发现已经变了。

<User>
<id>123</id>
<name>张三</name>
<age>20</age>
</User>

已经变成我们重新定义好的别名了。Gin的xml生成,使用的是Golang内置的encoding/xml,所以可以像使用encoding/xml一样,来自定义我们的XML格式。

xml数组

XML的数组和JSON的不一样,因为XML必须要有一个根节点,所以我们必须要有一个对象存放我们的struct数组,比如map.

func main() {
	r := gin.Default()
	r.GET("/xml", func(c *gin.Context) {
		allUsers := []User{{ID: 123, Name: "张三", Age: 20}, {ID: 456, Name: "李四", Age: 25}}
		c.XML(200, gin.H{"user": allUsers})
	})
	r.Run(":8080")
}

type User struct {
	ID   int    `xml:"id"`
	Name string `xml:"name"`
	Age  int    `xml:"age"`
}

使用一个gin.H存放,keyuser,我们运行查看信息:

<map>
    <user>
        <id>123</id>
        <name>张三</name>
        <age>20</age>
    </user>
    <user>
        <id>456</id>
        <name>李四</name>
        <age>25</age>
    </user>
</map>

已经是一个数组了。

小结

XML其实已经越来越不常用了,我们自己开发API,还是要用JSON的方式。不光XML不常用,其实Gin提供的YAML的支持更不常用,而且Gin提供的YAML的用法和XML、JSON基本一样,所以不再进行介绍,大家可以自己练练,也可以加入我的星球Golang Gin 实战,有更深入的讨论,一对一的答疑,公众号和博客没有的源代码分析。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言实战笔记(十五)| Go 并发示例-Runner

    这篇通过一个例子,演示使用通道来监控程序的执行时间,生命周期,甚至终止程序等。我们这个程序叫runner,我们可以称之为执行者,它可以在后台执行任何任务,而且我...

    飞雪无情
  • Go语言golang 200行写区块链源代码分析

    Github上有一个Repo,是一个使用Go语言(golang),不到200行代码些的区块链源代码,准确的说是174行。原作者起了个名字是 Code your ...

    飞雪无情
  • Golang Gin 实战(三)| 路由参数

    在 上一篇 Golang Gin 实战(二)| 简便的Restful API 实现 文章中,我们留了一个疑问,假如我们有很多用户,我们要为他们一个个注册路由(路...

    飞雪无情
  • 【菜鸟致敬】QQ坦白说解密

    1.模拟手机QQ 首先使用浏览器来模拟手机qq 这里使用的 Chrome 谷歌浏览器 其他浏览器操作一致(绝大部分主流浏览器) 然后浏览器打开开发者工具完成...

    Rare0716
  • 和我从头学SQL Server Integration Services

    本人一个IT屌丝男,一直在ITPRO的圈子里面混着,从来不是一个程序猿,水平就是开开关关windows的水平。昏昏然,成了一个油腻的大叔,但我的内心和业务水平还...

    盆盆
  • 今天花时间最多的两个小错误

    微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1、配置Maven项目的pom.xml文件报错 (1)、...

    compassblog
  • AI通过分析建筑规划来解释一个地区的肥胖水平

    在21世纪,肥胖率空前增长,对健康和医疗体系的毁灭性影响已经得到了很好的证明。尽管有数十项研究着眼于一些有助于体重增加的健康措施,但这种流行病仍在继续。

    AiTechYun
  • 【开源】竖亥:实测FPGA平台上HBM的惊人带宽!

    随着高带宽内存(HBM)的发展,FPGA正变得越来越强大,HBM 给了FPGA 更多能力去缓解再一些应用中遇到的内存带宽瓶颈和处理更多样的应用。然而,HBM 的...

    网络交换FPGA
  • 腾讯云 CDN 和 lnmp1.4 环境安装 Let’s Encrypt 免费证书教程

    魏艾斯博客www.vpsss.net
  • 微服务断路器模式那家强:Istio vs Hystrix?

    本文作者由浅及深,从核心问题的引入到具体模式的代码实现,阐述了微服务两种断路器模式的实现原理、优缺点以及二者的比较。

    用户5927304

扫码关注云+社区

领取腾讯云代金券