Gin

// 初识 Gin框架
//下载(可能会下载不全。缺什么get什么即可)
//go get -u -v github.com/gin-gonic/gin package main import (
"github.com/gin-gonic/gin"
"log"
"net/http"
) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.JSON(http.StatusOK, map[string]string{"name": "zjhah"})
}) err := r.Run()
log.Fatalln(err)
//
}

Gin框架的热加载 realize

// 下载
go get github.com/oxequa/realize // 下载之后
realize init 初始化 直接下步一步退出即可
realize start 就是直接将gin运行起来 进行热加载
  • Gin框架—log (Gin 框架 - 使用 logrus 进行日志记录)

约定日志格式字段:

请求时间, 日志级别, 状态码, 执行时间, 请求IP, 请求方式,请求路由

Logrus

API的URL设计规则restful api

1. api有版本信息

/v1/xxxx

/v2/xxx

2.尽可能的使用复数, 含义明确 名词最好

/v1/users

/v1/topics

3.使用GET参数规划数据展现规则

/v1/users

/v1/users?limit=10 //只显示10条

  • 路由组
	router := gin.Default()

	r := router.Group("/v1/")  // group组
r.GET("/", FirstJson)
r.POST("/", PostTest)
_ = router.Run(":9000")
  • api参数
// 这是api参数

r.GET("/:name", FirstJson)

c.param("name")

  • URL参数
?key=xxx & name=xxx

  • 表单取文件
r.Post("/v1/:file")

file := c.Formfile("file")

_ := c.saveUploadFile(file, file.FileName)

  • 表单上传多个文件
// 设置上传的文件的最大容量
r.MaxMultipartMemory = 8*1024 // 获取多个文件
form, _ := c.MultipartForm()
files := form.File["file"]
然后循环像上边单个存一样
  • 接收数据的结构体

package main import (
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/sirupsen/logrus"
_ "log"
"net/http"
) // 接收数据的结构体
type Option struct {
User string `form:"username" json:"username" uri:"user" xml:"user" binding:"required"` // binding必须不能为空
Password string `form:"password" json:"password" xml:"password" uri:"password"`
} func main() { // 创建路由
// default 创建的路由默认使用了两个中间件 logger()日志 recovery() 自动恢复
router := gin.Default() // 原生的是这个 是不会使用这两个中间件的
// router := gin.New() router.Use(gin.Logger())
r := router.Group("/v1")
{ r.POST("/JsonTest", JsonTest)
} _ = router.Run(":9000")
//
} func JsonTest(c *gin.Context) { // Bind() 默认解析并绑定form格式
// 根据请求头中的 content-type 判断数据类型
var Form Option
errs := c.Bind(&Form)
if errs != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": errs.Error()})
}
fmt.Println(Form) // 声明接收的变量 json绑定
var jsonData Option // 接收到的数据 绑定到jsonData结构体 ShouldBindJSON
err := c.ShouldBindJSON(&jsonData)
fmt.Println(jsonData)
if err != nil {
// gin.H 封装了生成json数据的工具
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
} if jsonData.User != "root" || jsonData.Password != "123" {
c.JSON(http.StatusBadRequest, gin.H{"status_code": "302"})
return
}
c.JSON(http.StatusOK, gin.H{"status": 200}) }
  • HTML模版渲染 类似于python render

// 加载模版文件
// router.LoadHTMLFiles("templates/index.html")
router.LoadHTMLGlob("templates/*") // 返回状态码。返回html渲染文件。返回想要在html文件中所需要的数据
c.HTML("200", "index.html", gin.H{"title": "ccn"})
  • 重定向
r.GET("/redirect", Redirects)

func Redirects(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://www.taobao.com/") }
  • 同步异步
// 异步
func Async(c *gin.Context) {
// go routine 机制可以方便的实现异步处理
// 注意: 在启动新的goroutine时, 不应该使用原始上下文, 必须使用他的只读副本
copyContent := c.Copy() // go func 处理的就是要处理的数据之类的 例如上传文件, 修改数据, 添加数据
go func() {
time.Sleep(5 * time.Second)
fmt.Println(copyContent.Request.Method, copyContent.Request.Header, copyContent.Request.RemoteAddr, copyContent.Request.RequestURI) }()
c.JSON(http.StatusOK, gin.H{"name": 123}) } // 正常的都是同步
  • gin中间件

//gin可以构建中间件, 但它只对注册过的路由函数起作用
//对于分组路由, 嵌套使用中间件, 可以限定中间件的作用范围
//中间件分为全局中间件, 单个路由中间件和群组中间件
//gin中间件必须是一个gin.HandlerFun类型 // 全局中间件所有的中间件都会经过 func GinMiddleWare() gin.HandlerFunc { return func(c *gin.Context) {
fmt.Println("中间件开始执行")
// 设置变量到context的key中, 后边可以通过Get()获取
c.Set("request", "中间件")
// 执行router绑定的函数
c.Next()
// 执行完中间件后执行的代码
status := c.Writer.Status()
fmt.Println(status)
}
} c.GET("request")
  • gin生成接口文档 swagger
  • JSON web token JWT
  • 令牌桶 漏桶

Gin框架介绍与使用的更多相关文章

  1. Gin框架介绍及使用

    Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...

  2. Go语言基础之20--web编程框架之Gin框架

    一.Gin框架介绍 1.1 简介 A. 基于httprouter开发的web框架. http://github.com/julienschmidt/httprouter B. 提供Martini风格的 ...

  3. GO语言GIN框架入门

    Gin框架介绍 Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 中文文档 Gin框架安装与使用 ...

  4. 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证

    本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...

  5. Gin 框架 - 安装和路由配置

    目录 概述 Gin 安装 路由配置 推荐阅读 概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 ...

  6. Go最火的Gin框架简单入门

    Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter,它提供了类似martini但更好性能(路由性能约快40倍)的API服务.官方地址:htt ...

  7. 基于gin框架搭建的一个简单的web服务

    刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技 ...

  8. gin框架实现一个简单的项目 ③

    承接:gin框架封装自己的路由 ② 对于一个项目来说,需要将各个功能模块分开,也就是所谓的三层模型,这里介绍一下个人的做法: contorller主要负责路由 model主要负责程序输入输出的数据 s ...

  9. gin框架教程三:JWT的使用

    JWT介绍 JWT (JSON Web Token) 是一种规范.这个规范允许我们使用JWT在用户和服务器之间安全传递信息. JWT的组成: jwt分3个部分,Header 头部.Payload 载荷 ...

随机推荐

  1. 获取执行计划之Autotrace

    Autotrace 简介 AUTOTRACE是一项SQL*Plus功能,自动跟踪为SQL语句生成一个执行计划并且提供与该语句的处理有关的统计. AUTOTRACE的好处是您不必设置跟踪文件的格式,并且 ...

  2. PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...

  3. Qt信号槽源码剖析(一)

    大家好,我是IT文艺男,来自一线大厂的一线程序员 大家在使用Qt开发程序时,都知道怎么使用Qt的信号槽,但是Qt信号槽是怎么工作的? 大部分人仍然不知道:也就是说大家只知道怎么使用,却不知道基于什么原 ...

  4. 如何获取canvas当前的缩放值

    项目中一直有一个问题困扰着我,我们的画布可以缩放平移旋转,支持拖拽生成图形,生成手写笔迹,如果用户选择的线条粗细为5像素,那么即使画布缩放过绘制出的线条粗细也应该是视觉上的5px,所以再绘制时赋值给c ...

  5. Python多环境管理——pyenv

    1 背景&概述 因某些需求,需要安装TensorFlow,很自然地在终端敲下了以下命令: pip install tensorflow 然后... 好家伙??? 居然没有?? 因为是Pytho ...

  6. 8. Centos 7 图像化界面

    Step 1:安装"X Window System" yum groupinstall "X Window System" 当出现 Complete!说明这里安 ...

  7. Queue API的几种实现详解

    目录 Queue API的几种方法的使用 ArrayBlockingQueue原理及源码解析 ArrayBlockingQueue的成员变量 ArrayBlockingQueue的offer和put方 ...

  8. 我与Git的那些破事(下)--分支模型

    在上篇文章中,我提到了Git的基本概念和一些本人实际项目中的总结.然而,最近读了Vincent Driessen写的一篇文章,觉得他总结的太好了,站在他肩膀上忍不住将自己的理解分享出来.Vincent ...

  9. MSSQL数据库清理Log 压缩数据库日志文件

    dump transaction 数据库名 with no_log go dbcc shrinkdatabase(数据库名)

  10. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...