Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang Gin 实战(十)| XML渲染

Golang Gin 实战(十)| XML渲染

作者头像
飞雪无情
发布于 2020-02-11 03:49:21
发布于 2020-02-11 03:49:21
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

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

来个map试试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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可以看到如下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<map>
<wechat>flysnow_org</wechat>
<blog>www.flysnow.org</blog>
</map>

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

自定义struct

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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渲染输出 非常相似,现在我们运行再通过浏览器访问看看。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<User>
<ID>123</ID>
<Name>张三</Name>
<Age>20</Age>
</User>

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

自定义节点名字

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type User struct {
	ID   int    `xml:"id"`
	Name string `xml:"name"`
	Age  int    `xml:"age"`
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<User>
<id>123</id>
<name>张三</name>
<age>20</age>
</User>

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

xml数组

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,我们运行查看信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 实战,有更深入的讨论,一对一的答疑,公众号和博客没有的源代码分析

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年1月3日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go组件学习——Web框架Gin
以前学Java的时候,和Spring全家桶打好关系就行了,从Spring、Spring MVC到SpringBoot,一脉相承。
JackieZheng
2019/11/18
1.2K0
Golang Gin 实战(一)| 快速安装入门
Gin 是一个非常优秀的Golang Web Framework,它不光API友好,性能也非常高,并且设计简洁,便于入门。所以它(Gin)非常受欢迎,在Github上已经三万三千多个星星,也是我最喜欢的Web 框架。
飞雪无情
2020/02/10
1.9K0
Golang Gin 实战(九)| JSONP跨域和劫持
浏览器都遵循同源策略,也就是说位于www.flysnow.org下的网页是无法访问非www.flysnow.org下的数据的,比如我们常见的AJAX跨域问题。
飞雪无情
2020/02/10
1.8K0
Golang Gin 实战(九)| JSONP跨域和劫持
Golang Gin 实战(八)| JSON渲染输出
现在开发API,所输出的基本上都是JSON格式的内容,相比比较旧的XML格式,JSON轻便、简洁、易于传输,所以现在的API使用非常多。
飞雪无情
2020/01/23
5.8K0
你会高效写http服务器吗?Gin实战演练
胖sir开始捣鼓http服务器,在寻求一种高效的解决方式且高性能的解决方式...
阿兵云原生
2023/02/16
2.2K0
Gin 15
前言 Gin 是一款用 Go(Golang) 编写的 web 框架 Gin is a web framework written in Go (Golang). It features a martini-like API with much better performance, up to 40 times faster thanks to httprouter 因为 httprouter, 它提供了更高的性能 这里演示一下 Gin 渲染 XML JSON 和 YAML gin 的 API 可以参考 A
franket
2021/08/10
3000
Gin-Web-Framework官方指南中文(下篇)
ShouldBind,ShouldBindJSON,ShouldBindXML,ShouldBindQuery,ShouldBindYAML
小诚信驿站
2019/10/31
2.4K0
Gin-Web-Framework官方指南中文(下篇)
知识分享之Golang——Gin学习之初次尝试(一)
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
cn華少
2021/12/01
5110
知识分享之Golang——Gin学习之初次尝试(一)
Golang Gin 实战(二)| 简便的Restful API 实现
在RESTful API 设计规范中,有一部分是针对HTTP 方法动作的定义,规定了这些方法对于具体资源的操作方式,比如GET、POST这两个是我们常用的,除了他们,HTTP还定义了很多HTTP 方法。
飞雪无情
2020/02/10
3.9K0
Golang框架Gin入门实战--(2)Gin路由中响应数据
Golang框架Gin入门实战–(2)Gin路由中响应数据 c.String() c.JSON() c.JSONP() c.XML() c.HTML() package main import ( "net/http" "github.com/gin-gonic/gin" ) type Article struct { Title string `json:"title"` Desc string `json:"desc"` Content string `json:"conten
互联网-小阿宇
2022/11/21
4710
01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
路由方法有GET, POST, PUT, PATCH, DELETE 和 OPTIONS,还有Any,可匹配以上任意类型的请求
iginkgo18
2020/10/30
1.6K0
Golang Gin 实战(十一)| HTML模板渲染
终于又到一个重头戏了。在整个服务端开发中,一个是API,一个就是网页,当前的API大部分都是通过JSON提供了,而网页就是通过HTML提供了。所以对于这么大的需求,Gin当然不会忘记,为我们提供了很多方便的操作。
飞雪无情
2020/01/13
7.4K0
gin学习笔记
首先我们使用 go moudle来管理依赖, go版本要求在 1.11.1 及以上
用户2825413
2020/02/20
8390
Go语言(十三)Gin Web框架
Gin Web框架 简介 基于httprouter开发的web框架:https://github.com/gin-gonic/gin 提供Martini风格的API,但比Martini要快40倍 非常轻量级,使用简洁 Gin框架的安装与使用 安装: go get -u github.com/gin-gonic/gin 基本使用 import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", fu
alexhuiwang
2020/09/24
9420
Go语言(十三)Gin Web框架
开发外包--golang熟练之gin & net(二)
Godev
2023/07/26
6620
gin框架之session
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道你是和谁说话呢?session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。这个时候我们可以采用session共享的方式存取session,例如我们把session放在redis、mysql、mongodb,当然这是后话,我们暂且不讨论。那么,在gin中是如何使用session的呢?
大话swift
2020/03/16
8.6K0
Go语言网络编程入门不走弯路最佳案例(写Api接口)
Go语言是Google领导开发的一门编程语言,国内可访问的官网 https://golang.google.cn/
zhaoolee
2020/12/16
1.5K0
Go语言网络编程入门不走弯路最佳案例(写Api接口)
Golang框架Gin入门实战--(5)Get、Post以及动态路由转值、Get Post数据解析到结构体、Post Xml数据解析到结构体
此篇文章内容基于上篇文章继续修改Golang框架Gin入门实战–(4)HTML模板渲染以及模板语法 自定义模板函数 静态文件服务(下) main.go
互联网-小阿宇
2022/11/21
1.3K0
Golang Gin 实战(三)| 路由参数
在 上一篇 Golang Gin 实战(二)| 简便的Restful API 实现 文章中,我们留了一个疑问,假如我们有很多用户,我们要为他们一个个注册路由(路径)吗?
飞雪无情
2020/02/10
6K0
02 . Go框架之Gin框架从入门到熟悉(数据解析和绑定,渲染,重定向,同步异步,中间件)
json,结构体,xml, yaml类似于java的properties,protobuf
iginkgo18
2020/11/04
1.6K0
02 . Go框架之Gin框架从入门到熟悉(数据解析和绑定,渲染,重定向,同步异步,中间件)
推荐阅读
相关推荐
Go组件学习——Web框架Gin
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档