1、开启Go Modules功能(已开启可忽略此步骤)
go module是go官方自带的go依赖管理功能,从Go 1.13版本正式推荐使用,它可以将项目下的所有依赖集中到 go.mod 文件,进行集中管理。使用go module管理依赖将会在项目根目录下生成两个文件 go.mod(负责记录当前项目的所有依赖)和go.sum(记录每个依赖库的版本和哈希值)
我们使用如下命令开启go modules功能:
go env -w GO111MODULE=on
2、生成go.mod文件(目录下已有此文件可忽略此步骤)
go mod init [项目文件夹名称]
例子
go mod init my_gin
3、使用国内代理
go env -w GOPROXY=https://goproxy.cn
4、下载gin框架
go get -u github.com/gin-gonic/gin
结果如下图
5、常见错误
5.1、$GOPATH/go.mod exists but should not
问题原因: 老版本我们都是在环境变量里面设置GOPATH
用来管理项目的,我们第一步使用了GO Modules
,GOPATH
和GO Modules
这两个都是用来管理项目的,开启模块支持后生成的go.mod
文件,不能在GOPATH
指定的目录下
解决办法 1、: 不要在环境变量指定的GOPATH目录下创建项目,在其他目录下创建项目,你的环境变量GOPATH
目录下不能存在go.mod
文件(推荐)
解决办法 2、: 将环境变量GOPATH删除,因为GOPATH和go.mod都是用来管理项目,二者不能在同一个目录下,go.mod比GOPATH更高级
GOPATH(项目管理)和go.mod(go modules项目管理)比较:
1、最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面,下载的依赖包也没有版本概念,这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖无法依赖同一个第三方的库的不同版本,并且,代码开发必须在GOPATH的src目录下。这在实际开发中造成许多的问题。
2、go mod的优势,项目不在需要放到$GOPATH/src,依赖包的版本控制
交由go.mod文件控制。在go.mod用require语句指定包和版本 ,go命令会根据指定的路径和版本下载包,指定版本时可以用latest,这样它会自动下载指定包的最新版本;如果,go.mod中没有指定,go命令会自动下载代码中的依赖的最新版本
5.2、错误go: go.mod file not found in current directory or any parent directory.
错误原因,缺少go.mod文件,按照第一步跟着操作即可
6、在项目目录下新建main.go文件
package mainimport "github.com/gin-gonic/gin"func main() {//创建默认的路由引擎web := gin.Default()//配置路由web.GET("/", func(c *gin.Context) {c.String(200, "值:%v", "游戏是用来娱乐放松的,不是用来浪费青春的")})web.GET("/news", func(c *gin.Context) {c.String(200, "新闻页面")})//启动一个web服务web.Run(":8000")
}
8、运行项目
go run main.go
9、golang程序的热加载
以上操作每当我们修改代码的的时候,就邀重新运行一次go run main.go
实行内容刷新 ,这样很麻烦,热加载就是当我们修改代码时,程序自动重新加载并且执行,省去了手动执行编译的过程
go get github.com/pilu/fresh
安装了fresh
之后会在GOPATH
目录下生成一个bin
目录,里面有一个fresh.exe
文件
我们把这个bin目录添加到环境变量中即可
在项目目录下运行命令fresh
,后续修改内容不需要重新运行go run main.go
了,只需要刷新浏览器即可
fresh