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. Git - 使用命令和P4Merge进行diff

    P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具). 下载地址: https://www.perforce.com/downloads/visual-me ...

  2. 在M1芯片的Mac系统上做.net core开发靠谱吗?

    作为一个7年老.NET程序员,最近几年苹果慢慢接替微软,成为我心中最酷的科技公司. 为什么我会选择Mac os作为我的开发环境? 很多做.net的同学都使用Windows系统作为自己的开发环境,我其实 ...

  3. idea报错Selected Java version 11 is not supported by SDK (maximum 8)

    解决方案

  4. vue 快速入门 系列

    vue 快速入门(未完结,持续更新中...) 前言 为什么要学习 vue 现在主流的框架 vue.angular 和 react 都是声明式操作 DOM 的框架.所谓声明式,就是我们只需要描述状态与 ...

  5. 2020牛客NOIP赛前集训营-普及组(第二场)A-面试

    面 试 面试 面试 题目描述 牛牛内推了好多人去牛客网参加面试,面试总共分四轮,每轮的面试官都会对面试者的发挥进行评分.评分有 A B C D 四种.如果面试者在四轮中有一次发挥被评为 D,或者两次发 ...

  6. web编辑工具 - Brackets - 强大免费的开源跨平台Web前端开发工具IDE

      简单使用可以参考: https://blog.csdn.net/melon19931226/article/details/68066971/ https://www.iplaysoft.com/ ...

  7. 设计原则:开闭原则(OCP)

    1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...

  8. 美团点评技术专家 帮你快速上手跨平台开发框架Flutter

    Flutter并没有开创新的概念,它背后的框架原理和底层设计思想,与原生Android/iOS开发并没有本质区别,甚至从React.Native中吸收了不少优秀的设计理念. Flutter是Googl ...

  9. Kafka分片存储、消息分发和持久化机制

    Kafka 分片存储机制 Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群. Topic:一类消息,例如 page vi ...

  10. 关于Eclipse Debug断点调试出现 Search not found 页面的解决办法

    1. 在代码中鼠标右键 Debug AS ---> Debug Configurations... ----> 找到Source选项  ---> 点击add ---> 选择 j ...