前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Gin 15

作者头像
franket
发布2021-08-10 17:29:37
2780
发布2021-08-10 17:29:37
举报
文章被收录于专栏:技术杂记

前言

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 可以参考 API REFFERENCE

Tip: 当前的版本为 Gin 1.2Go 1.10 (但是实验环境下,Go没有使用最新的版本)


操作

系统环境

代码语言:javascript
复制
[root@h160 ~]# hostnamectl 
   Static hostname: h160
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d46f9440d4be429ea66b726977adf233
           Boot ID: a0fc6a1b4f124e39a27866d4df0701fa
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.2.3.el7.x86_64
      Architecture: x86-64
[root@h160 ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 84363sec preferred_lft 84363sec
    inet6 fe80::5054:ff:fec9:c704/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:48:f4:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.160/24 brd 192.168.56.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe48:f42c/64 scope link 
       valid_lft forever preferred_lft forever
[root@h160 ~]# go version
go version go1.9.4 linux/amd64
[root@h160 ~]#

进入 GOPATH

代码语言:javascript
复制
[vagrant@h160 ~]$ echo $GOPATH
/vagrant/go
[vagrant@h160 ~]$ cd $GOPATH
[vagrant@h160 go]$ pwd
/vagrant/go
[vagrant@h160 go]$ 

代码注解

代码语言:javascript
复制
package main //指明此包为 main 包

import ( //使用这种方式导入多个包可以更为简洁
	"net/http" //导入这个以调用 http.StatusOK

	"github.com/gin-gonic/gin" //导入 gin 包
)

func main() { // 一个main包中有且只有一个main 函数
	r := gin.Default()           //使用 gin.Default() 方法生成一个引擎实例,这个实例默认情况下已经将 Logger Recovery 进行了装载
	r.GET("/someJSON", someJSON) //GET方法匹配到 /someJSON 后都交由 someJSON 来处理
	r.GET("/moreJSON", moreJSON) //GET方法匹配到 /moreJSON 后都交由 moreJSON 来处理
	r.GET("/someXML", someXML)   //GET方法匹配到 /someXML 后都交由 someXML 来处理
	r.GET("/someYAML", someYAML) //GET方法匹配到 /someYAML 后都交由 someYAML 来处理
	r.Run(":8080")               //在 0.0.0.0:8080 上启监听
}

func someJSON(c *gin.Context) { //构建一个 someJSON 函数来处理请求
	c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
}
func moreJSON(c *gin.Context) { //构建一个 moreJSON 函数来处理请求
	var msg struct { //定义一个匿名结构体,和使用这个类型来定义一个 msg
		Name    string `json:"user"` //拥有三个属性
		Message string
		Number  int
	}
	msg.Name = "bob"           //赋值 Name
	msg.Message = "hello"      //赋值 Message
	msg.Number = 8080          //赋值 Number
	c.JSON(http.StatusOK, msg) // 使用 JSON 的格式输出
}

func someXML(c *gin.Context) { //构建一个 someXML 函数来处理请求
	c.XML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK}) //使用 XML 的格式输出
}

func someYAML(c *gin.Context) { //构建一个 someYAML 函数来处理请求
	c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK}) //使用 XML 的格式输出
}

编译执行

代码语言:javascript
复制
[vagrant@h160 go]$ go run hello.go 
[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /someJSON                 --> main.someJSON (3 handlers)
[GIN-debug] GET    /moreJSON                 --> main.moreJSON (3 handlers)
[GIN-debug] GET    /someXML                  --> main.someXML (3 handlers)
[GIN-debug] GET    /someYAML                 --> main.someYAML (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2018/07/19 - 15:30:58 | 200 |     216.692µs |  192.168.56.105 | GET      /someJSON
[GIN] 2018/07/19 - 15:31:05 | 200 |     121.688µs |  192.168.56.105 | GET      /moreJSON
[GIN] 2018/07/19 - 15:31:14 | 200 |     148.411µs |  192.168.56.105 | GET      /someXML
[GIN] 2018/07/19 - 15:31:20 | 200 |     183.779µs |  192.168.56.105 | GET      /someYAML
...
...
...

客户的请求为

代码语言:javascript
复制
[vagrant@h105 ~]$ curl -v -XGET 'http://192.168.56.160:8080/someJSON'
* About to connect() to 192.168.56.160 port 8080 (#0)
*   Trying 192.168.56.160...
* Connected to 192.168.56.160 (192.168.56.160) port 8080 (#0)
> GET /someJSON HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.160:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Date: Thu, 19 Jul 2018 15:30:58 GMT
< Content-Length: 30
< 
* Connection #0 to host 192.168.56.160 left intact
{"message":"hey","status":200}[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ curl -v -XGET 'http://192.168.56.160:8080/moreJSON'
* About to connect() to 192.168.56.160 port 8080 (#0)
*   Trying 192.168.56.160...
* Connected to 192.168.56.160 (192.168.56.160) port 8080 (#0)
> GET /moreJSON HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.160:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< Date: Thu, 19 Jul 2018 15:31:05 GMT
< Content-Length: 46
< 
* Connection #0 to host 192.168.56.160 left intact
{"user":"bob","Message":"hello","Number":8080}[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ curl -v -XGET 'http://192.168.56.160:8080/someXML'
* About to connect() to 192.168.56.160 port 8080 (#0)
*   Trying 192.168.56.160...
* Connected to 192.168.56.160 (192.168.56.160) port 8080 (#0)
> GET /someXML HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.160:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: application/xml; charset=utf-8
< Date: Thu, 19 Jul 2018 15:31:14 GMT
< Content-Length: 53
< 
* Connection #0 to host 192.168.56.160 left intact
<map><message>hey</message><status>200</status></map>[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ 
[vagrant@h105 ~]$ curl -v -XGET 'http://192.168.56.160:8080/someYAML'
* About to connect() to 192.168.56.160 port 8080 (#0)
*   Trying 192.168.56.160...
* Connected to 192.168.56.160 (192.168.56.160) port 8080 (#0)
> GET /someYAML HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.56.160:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: application/x-yaml; charset=utf-8
< Date: Thu, 19 Jul 2018 15:31:20 GMT
< Content-Length: 25
< 
message: hey
status: 200
* Connection #0 to host 192.168.56.160 left intact
[vagrant@h105 ~]$ 

总结

构建一个简单的 web 还是非常快捷的

可以以 JSON XML YAML 的格式进行输出

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 操作
    • 系统环境
      • 进入 GOPATH
        • 代码注解
          • 编译执行
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档