一. Windows安装Go
去Go语言中文网下载go的安装包:
下载完成之后,一直Next,选择安装路径,Finish!
查看环境变量Path,最后面会自动添加一个*****\Go\bin
的目录,就说明安装没问题了!
go version #查看go版本
二. GOROOT、GOPATH、GOMOD
参考:GOPATH、GOROOT、GOMOD、彻底搞懂golang的GOROOT和GOPATH、详解GOROOT和GOPATH
1. 配置Go的两个基础环境变量,GOROOT、GOPATH
2. GOROOT:Go安装目录的绝对路径
这个目录下面也有src, bin, pkg三个文件夹,import内置包的时候,并不需要额外安装,当程序运行时,会先去GOROOT下找相应的包来运行
3. GOPATH:项目存放路径,保存go项目代码和一些第三方依赖包
GOPATH 可以设置多个,其中,第一个将会是默认的包目录,使用 go get 下载的包都会在第一个path中的src目录下,使用 go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件;
- GOPATH之下主要包含三个目录:bin/pkg/src
- bin目录主要存放可执行文件
- pkg目录主要存放编译好的库文件,主要是*.a文件
- src目录主要存放go的源文件
- 缺点
- 当我们的第三方包不是官方库时都要放在GOPATH/src下才可以使用, 不同的项目采用的第三方库是不同的版本go1.11以前是要设置多组不同的GOPATH
4. GOPMOD:包管理工具
- Golang1.11版本新引入的官方包管理工具,用于解决之前没有地方记录依赖包具体版本的问题
4.1. 开启gomod, go env -w GO111MODULE=auto
,下载下来的第三方库就在GOPATH/pkg/mod
文件夹里面
- auto
当存在 go.mod 文件时, 其行为均会等同于于 GO111MODULE=on;
当处于 GOPATH 内且没有 go.mod 文件存在时其行为会等同于 GO111MODULE=off; - on
即使项目在您的 GOPATH 中,GO111MODULE = on 仍将强制使用 Go 模块。需要 go.mod 正常工作 - off
强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外。
4.2. 项目可以存放在任意位置(以下为非GOPATH的目录)
-
执行
go mod init module_name
, 初始化模块,module_name可填可不填,不填的话就是采用项目文件夹的名称,会在项目根目录下生成一个go.mod的文件 -
假设我要引入github.com/gin-gonic/gin v1.5.0这个包,在go.mod中添加
require github.com/gin-gonic/gin v1.5.0
,然后运行go mod download
即可!会生成一个和go.mod同级目录的文件go.sum
,也可以不执行go mod download
而直接运行go build
或者go install
也会自动下载包
-
如果不想自己修改go.mod,也可以直接用require指定版本,执行go get指令
go get github.com/gin-gonic/[email protected]
只要有开启gomod功能,go get就不会再把包放在src下的package,而是会放在
/pkg/mod
里面,并且mod会写好引入。也就不需要go mod download了
4.3 go.mod文件中module、require、replace和exclude 四个命令解析
- module:指令用于声明当前模块的名称,即模块的导入路径
# 这个指令指定了当前模块的导入路径为 example.com/myproject module example.com/myproject
- require:指令用于声明项目所依赖的其他模块及其版本
# 指定项目依赖的两个模块 example.com/dependency 和 example.com/anotherdependency,分别需要的版本为 v1.2.3 和 v2.0.1 require ( example.com/dependency v1.2.3 example.com/anotherdependency v2.0.1 )
- replace:指令用于替换依赖模块的版本或导入路径。在开发过程中可能会用到,例如用本地修改的代码替换远程依赖库
# 将依赖模块 example.com/dependency 的导入路径替换为本地路径 ../my/local/dependency replace example.com/dependency => ../my/local/dependency
- exclude:指令用于排除特定版本的依赖模块。这在解决依赖冲突或避免使用某些不兼容版本时非常有用例如:
# 指定排除依赖模块 example.com/dependency 的版本 v1.2.3 exclude example.com/dependency v1.2.3
4.4 go mod
命令详解
go mod download
:下载项目中的所有依赖包。它会检查 go.mod 文件并下载缺失的依赖项。go mod edit
:用于编辑 go.mod 文件,可以添加、移除或更新依赖项。例如,可以使用go mod edit -require [package]@[version]
来添加指定版本的依赖项。go mod graph
:生成一个文本表示的模块依赖关系图。如果想要可视化的模块依赖关系图,你可以使用第三方工具,如:Graphviz 。go mod init
:在当前目录初始化一个新的模块,并指定模块路径。这个命令会生成一个新的 go.mod 文件。go mod tidy
:清理项目中未使用的依赖项。它会根据项目代码的实际使用情况来更新 go.mod 文件,并移除不再需要的依赖项。go mod vendor
:将依赖项复制到项目的 vendor 目录中,以便离线使用。这个命令会创建 vendor 目录并将所有依赖项复制到该目录下。go mod verify
:验证项目的依赖项的完整性。它会检查依赖项的哈希值,确保其内容没有被篡改。go mod why
:查询某个依赖项被引入的原因。可以使用 go mod why [package] 来查找指定包的引入原因。
一些其他相关命令:
go get -u [package]
:更新依赖。该命令用于更新指定的依赖包到最新版本。go get [package]
:添加依赖。该命令用于添加指定的包作为依赖,并自动更新 go.mod 文件和下载依赖包。go list -m all
:查看依赖。该命令用于查看当前模块的所有依赖关系。
三. 其他配置
1. go env #查询go的环境配置信息
- GOBIN:存放可执行文件的目录的绝对路径
当我们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为GOPATH下的bin目录。 - GOTOOLDIR:Go工具目录的绝对路径
- GOCACHE:go缓存目录
可以使用 go clean -cache 清空,如果目录变得很大的话
*GOENV:GO全局环境变量 - GOMODCACHE:go mod进行包管理时的缓存目录
一般为GOPATH下的pkg下的mod目录 - GOPROXY:代理
- GOTOOLDIR:GO工具的安装目录
有cgo.exe等 - GOVERSION:go的版本号
2. 设置代理
# 设置`GOPROXY`的值为`https://goproxy.cn,direct`(不能设置操作系统环境变量)
go env -w GOPROXY=https://goproxy.cn,direct
恢复默认值
# 将`GOPROXY`恢复为默认值
go env -u GOPROXY