第一章-gin框架前奏
第一节 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.可扩展性:新建一个中间件非常简单
第二节:环境搭建
注意:go1.9版本以上,很快将不再支持go1.7或go1.8。
一、go环境安装
1.go安装
2.环境配置:
- 变量名:GOPATH 变量值:E:\go\workspace 你的工作路径
- 变量名:GOROOT 变量值:E:\go\install go的安装路径
- 变量名:Path 增加值:%GOROOT%\bin;%GOPATH%\bin;
注意:删除自动添加的gopath和goroot
3.检查配置是否成功
- go env 查看GOPATH和GOROOT是否正确
二、git安装:拉取代码
这里不再演示
三、工程管理:工作目录下新建三个文件夹
1.src:用于以代码包的形式组织并保存go源码文件,
2.pkg:用于存放经由go install命令构建的安装后的代码包,不需要手动创建
3.bin:与pkg目录类似,在通过go install命令完成安装后,保存由go命令源码间生成的可执行文件
四、安装gin
go get -u github.com/gin-gonic/gin
第三节 第一个gin项目
package main import "github.com/gin-gonic/gin" func main() { //engine := gin.New() router := gin.Default() engine.GET("/", func(ctx *gin.Context) { ctx.String(200,"hello gin") }) router.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文件才会启用。
项目可以不用建在src下了,任何非中文路径下都可以,建议有个统一的代码路径
三、go.mod文件的语法介绍
go help go.mod 查看帮助
示例:
module my/thing go 1.13.4 require ( new/thing v2.3.4 old/thing v1.2.3 )
1. module:指明根目录
2. go 后面跟版本号是指定go的版本
2. require是个动作指令,对依赖包起作用,比如require(依赖),还有exclude(排除),replace(替代),相同动作的可以放在一个动词+括号组成的结构中,如下:
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
3.注释:使用//,没有/* xxx */这种块注释
四、go mod 命令
go mod help 查看帮助
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添加依赖的包)