Gin 框架入门实战系列(一)

GIN介绍

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点

对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错

借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范

Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们也推荐您使用 Gin。
当某个接口的性能遭到较大挑战的时候,这个还是可以考虑使用 Gin 重写接口。

安装

要安装 Gin 软件包,需要先安装 Go 并设置 Go 工作区。

1.下载并安装 gin:

$ go get -u github.com/gin-gonic/gin

2.将 gin 引入到代码中:

import "github.com/gin-gonic/gin"

3.(可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:

import "net/http"

http.statusok就是状态码200

 基本路由

路由概述 

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成
的,涉及到应用如何响应客户端对某个网站节点的访问。
RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路由的
时候建议参考 RESTful API 指南。
GET(SELECT)
从服务器取出资源(一项或多项)
POST(CREATE)
在服务器新建一个资源
PUT(UPDATE)
在服务器更新资源(客户端提供改变后的完整资源)
DELETE(DELETE) 
从服务器删除资源

简单的路由配置 

测试我使用的是Apipost7测试工具

	route.GET("/",func (c *gin.Context){
		c.String(http.StatusOK,"Get获取页面信息")
	})

gin.Context,封装了request和response

package main
// (可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:
import (
	"github.com/gin-gonic/gin"
	"net/http"
	
)

func main(){

	//创建一个默认路由
	route := gin.Default()
	//配置路由
	// gin.Context,封装了request和response
	route.GET("/",func (c *gin.Context){
		c.String(http.StatusOK,"Get获取页面信息")
	})

	route.GET("/ping",func(c *gin.Context){
		c.String(200,"可配置多个GET方法来进行测试")
	})
	route.POST("/add",func (c *gin.Context){
		c.String(http.StatusOK,"post方法主要用于在服务器新建一个资源")
	})
	route.PUT("justice",func(c *gin.Context){
		c.String(200,"put方法在服务器更新资源,客户端提供改变后的完整资源")
	})
	route.DELETE("/delete",func(c *gin.Context){
		c.String(200,"从服务器删除资源")
	})
	//定义监听的端口
	route.Run(":8210")
}

 

c.String() c.JSON() c.JSONP() c.XML() c.HTML()

返回一个字符串

r.GET("/",func(ctx *gin.Context) {
		ctx.String(http.StatusOK,"%v","返回的字符串")
	})

返回一个 JSON 数据 

	r.GET("/json" ,func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK,map[string]interface{}{
			"title" :"地区",
			"city":"城市",
		})
	})
//gin.H其实就是封装的是map
	r.GET("/json1" ,func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK,gin.H{
			"title" :"地区",
			"city":"城市",
			"province":"曹县",
		})
	})

gin.H其实就是封装的是map

 搞一个结构体

package main
import(
	"net/http"

	"github.com/gin-gonic/gin"


)

type Structdemo struct{
	Name string `json:"name"`
	Age int		`json:"age"`
	Servant string `json:"servant"`
}

func main(){

	r.GET("/json2",func(ctx *gin.Context) {
		a := &Structdemo{
			Name: "卫宫士郎",
			Age: 19,
			Servant: "sabar",
		}
		ctx.JSON(http.StatusOK,a)
	})


}

 

切换标题的操作

r.GET("/json3",func(ctx *gin.Context) {

	type People struct{
		Name string `json:"name"`
		Servant string	`json:"servant"`
	}
	b := &People{
		Name: "远坂凛",
		Servant: "archer",
	}
	ctx.JSON(http.StatusOK,b)
})

响应Jsonp请求

JSONP的原理是通过动态创建<script>标签,并设置其src属性为目标数据源的URL。目标数据源在服务端返回的响应数据需要用一个回调函数进行包裹,这样在客户端收到数据时,将会直接执行回调函数,从而将数据传递到客户端。这样就实现了在不同域之间获取数据的需求和跨域的限制。

    // http://localhost:8080/jsonp?callback=xxxx

	r.GET("/jsonp", func(ctx *gin.Context) {
		d := &Structdemo{
			Name: "卫宫士郎",
			Age: 19,
			Servant: "sabar",
		}
		ctx.JSONP(200, d)
	})

返回 XML 数据 

	r.GET("/xml", func(ctx *gin.Context) {
		ctx.XML(http.StatusOK,gin.H{
			"title":"页面",
			"information":123,
		})
	})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵唯一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值