最近准备学习 Go 语言,总结了一些常见的 Go 命令,用于 Go 环境设置,项目构建等
主要有:
GOROOT,GOPATH,GOBIN,GOPROXY,GO111MODULE 等环境设置
go env,go run,go build,go install,go mod,go get,go clean 等命令
最后记录了一下 go.mod 文件常见的格式
GOROOT
安装目录:/usr/local/go
GOPATH
工作目录:/root/go
GOPATH/bin
GOPATH/pkg
GOPATH/src
GOBIN
生成目录:GOPATH/bin
GOPROXY
设置代理
go env -w GOPROXY=“https://goproxy.cn,direct”
GO111MODULE
开启包管理
go env -w GO111MODULE=“on”
go env
查看 go 环境设置
go env
go run
只执行,不会产生任何文件,一定要有 main 包,没有 main 包会报错
go run file_name
go build
编译当前目录下的所有 go 文件
go build file_name
有 main 包,会产生 file_name 可执行文件在本地
没有 main 包,什么都不会产生,只检查是否有错误
go build -o object_name file_name
产生 object_name 包,但不能执行,因为没有 main 包
go install
编译并安装当前目录下的所有 go 文件
go install file_name
要编译的包下,必须有 main 包,且 main 包下必须有 main 方法,才会生成可执行文件,会产生 file_name 可执行文件在 GOBIN 路径下
没有 main 包,什么都不会产生,只检查是否有错误
go install github.com/google/gops@latest
会下载文件在 GOBIN 路径下
go mod
go mod init project_name
初始化项目
go mod download github.com/gin-gonic/gin@v1.9.1
只会下载目标模块,不会下载所需的关联模块,也不会往 go.mod 添加依赖
关联模块需要 go mod tidy 添加依赖
或者 go mod edit -require “github.com/gin-gonic/gin@v1.9.1” 添加依赖
go mod tidy
依赖对齐,下载本模块在内的所有关联模块,并往 go.mod 添加依赖
go mod edit -require=“github.com/gin-gonic/gin@v1.9.1”
添加依赖,手动执行
go mod edit -exclude=“github.com/gin-gonic/gin@v1.9.1”
排除依赖,手动执行
go mod edit -replace=“golang.org/x/crypto@v0.0.1 => golang.org/x/crypto@v0.0.2”
代替依赖,手动执行
go mod edit -retract=“v1.0.0”
撤回版本,手动执行
go mod edit -dropretract=“v1.0.0”
去除撤回版本,手动执行
go mod vendor
把项目所需要的,引用于 GOPATH/pkg/ 中的文件复制到项目下的 vendor
go mod verify
验证 mod 的正确性
go mod why github.com/go-playground/validator/v10
检查依赖,注意:不需要版本号
go get
go get github.com/gin-gonic/gin@v1.9.1
自动下载/寻找本模块,并下载关联模块,自动往 go.mod 添加依赖
相当于 go mod download + go mod tidy
go get -u github.com/gin-gonic/gin@v1.9.1
假如本地已经存在本模块&关联模块,加 -u 参数可以拉取模块的最新内容
go clean
go clean
清除一些 object 文件 或者 go build 产生的可执行文件,但 GOBIN 下安装的可执行文件不会被删除
go clean -modcache
清除 GOPATH/pkg/mod 内的所有内容
go.mod文件
module blog
go 1.21.1
// 引用第三方模块
require (
github.com/gin-gonic/gin v1.9.1
github.com/go-playground/validator/v10 v10.14.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
)
exclude (
// 排除第三方模块
// 例子:
// github.com/gin-gonic/gin v1.9.0
// 排除 gin v1.9.0 版本
)
replace (
// 替换第三方模块
// 例子:
// golang.org/x/crypto v0.0.1 => golang.org/x/crypto v0.0.2
// 将 crypto v0.0.1 替换为 crypto v0.0.2
)
retract (
// 撤回本模块的版本
// 例子:
// v1.0.0
// 撤回 v1.0.0 版本
)