不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Gin框架介绍

gin框架介绍

gin是用go语言开发的一个web框架,简单易用,是一个轻量级框架。

为什么选择Gin

  • 1.运行响应非常快
  • 2.快速开发
  • 3.文档齐全
  • 4.社区活跃

特性

  • 1.快速:基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。
  • 2.支持中间件:传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。
  • 3.Crash 处理:Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!
  • 4.JSON 验证:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。
  • 5.路由组:更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。
  • 6.错误管理:Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。
  • 7.内置渲染:Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。
  • 8.可扩展性:新建一个中间件非常简单。

Gin环境搭建

注意:go1.9版本以上,很快将不再支持go1.7或go1.8。

先安装Go环境,然后直接运行以下命令即可:

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

我的第一个Gin项目

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

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

func main() {
//engine := gin.New()
engine := gin.Default()
engine.GET("/", func(context *gin.Context) {
context.String(200,"hello gin")
})

engine.Run(":9000")
}

运行原理

router := gin.Default()

初始化一个引擎,是gin.New()的升级。

router.GET

  • 1.RESTFUL风格的请求方法(method)
  • 2.有两个参数:
    relativePath:路由,string类型
    HandlerFunc:执行的函数
  • 3.可以使用router.Handle代替,多了个的method参数(字符串),method参数必须是大写的,如:GET

执行的函数

  • 1.必须有个参数是gin.Context指针类型的
    注意:context是gin的一个重要组成部分。用来在中间层传递数据流。
  • 2.函数是个参数,不能调用

router.Run

启动http监听,有个address参数,字符串类型的,可以指定host和port
注意:

  • addr的host和port是用冒号分隔的
  • 只指定port,port前面必须要有冒号
  • 指定了host和port,host和port中间有冒号
  • 不能只指定host

go mod包管理

前提是Go版本>=1.11

什么是module?

go中包管理工具

使用module和不使用的区别

使用环境变量中的GO111MODULE控制是否使用mod

  • 1.开启mod:go env -w GO111MODULE=on会将包下载到gopath下的pkg下的mod文件夹中
  • 2.关闭mod:go env -w GO111MODULE=off会将包下载到gopath下的src下
  • 3.go env GO111MODULE=auto,只有当前目录在GOPATH/src目录之外而且当前目录包含go.mod文件或者其子目录包含go.mod文件才会启用。

go mod文件的语法介绍

示例:

1
2
3
4
5
6
7
8
module my/thing

go 1.13.4

require (
new/thing v2.3.4
old/thing v1.2.3
)
  • 1.module:指明根目录
  • 2.go 后面跟版本号是指定go的版本
  • 3.require是个动作指令,对依赖包起作用,比如require(依赖),还有exclude(排除),replace(替代),相同动作的可以放在一个动词+括号组成的结构中,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
require (
new/thing v2.3.4
old/thing v1.2.3
)

require new/thing v2.3.4
require old/thing v1.2.3

// 排除
exclude old/thing v1.2.3

// 替换,使用箭头后的替换前面的
replace bad/thing v1.4.5 => good/thing v1.4.5

注意:

  • exclude和replace仅适用于主的go.mod文件中,其他的依赖中会被忽略、
  • 可以使用replace替换无法获取的库,比如golang.org/x/crypto replace为github.com.com/golang/crypto
  • 注释:使用//,没有/* xxx */这种块注释

go mod 命令

go mod help 查看帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
download    下载模块到本地缓存,go env中的GOCACHE路径,可以通过go clean -cache清空缓存多个项目可以共享缓存的包
edit 在工具或脚本中编辑go.mod文件
graph 打印模块需求图
init 在当前目录下初始化新的模块
go mod init 【项目名】 默认使用当前路径的项目名称
tidy 添加缺失的模块以及移除无用的模块,生成go.sum文件
vendor 会自动下载项目中依赖的包到项目根目录下的vendor文件夹下,并写入go.mod文件,同时生成modules.txt文件
go mod vender -v

verify 检查当前模块的依赖是否全部下载下来,是否下载下来被修改过
why 解释为什么需要包或模块


注意:-v参数可以查看执行的详细信息

已经完成的项目可以这样操作来使用mod

  • 项目路径下执行go mod init
  • 然后再执行go mod vendor(或者直接运行项目)

项目中可以是这样的执行顺序:

  • init初始化 –> tidy 增删模块–> verify 校验模块–>vendor

注意:项目中引入该项目下的任何路径都要是绝对路径,也就是以改项目名开头的路径

使用mod的步骤:

  • 1.开启mod:go111module=on
  • 2.进入项目,执行go mod init (在项目根目录生成go.mod文件)
  • 3.启动项目(go.mod添加依赖的包)
------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!