go get
go get 是go依赖包的管理工具,会根据 go 命令是在mod模式还是传统 GOPATH 模式下运行而改变行为,Get 下载由导入路径命名的包与他们的依赖,也可以指定版本或者升降版本。然后它会安装命名的包,像
go install命令一样安装下载好的软件包。“go get”将仅用于调整当前模块的依赖关系
Get 将其命令行参数解析为特定模块版本的包,更新 go.mod 以要求这些版本,将源代码下载到模块缓存中,然后构建并安装命名包。为软件包添加依赖项或将其升级到最新版本:go get example.com/pkg 将软件包升级或降级到特定版本:go get example.com/pkg@v1.2.3 删除对需要它的模块和降级模块:go get example.com/mod@none 。
go help get
usage: go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]
go help gopath-get
go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
-u 参数 强制软件包版本为最新版本。
-f 参数 仅在设置 -u 时有效,它强制 get -u 不验证每个包是否已从其导入路径所暗示的源代码控制存储库中检出
-v 参数 输出详细进度和调试输出
-d 参数 get 不构建或安装包。 get 只会更新 go.mod 并下载构建包所需的源代码。不推荐使用 get 构建和安装软件包。在未来的版本中,-d 标志将默认启用,“go get”将仅用于调整当前模块的依赖关系
-fix 参数 get 在解决依赖关系或构建代码之前对下载的包运行修复工具。
# 例如我们安装
go get github.com/golang/lint/golint
go install
go install 命令用于构建和安装软件包。当指定版本以mod模式运行时,忽略当前目录中的 go.mod 文件。例如: go install example.com/pkg@v1.2.3 ,go install example.com/pkg@latest .要使用当前模块的依赖项安装包,请使用“go install”。要安装忽略当前模块的软件包,请在每个参数后使用带有@version 后缀的“go install”,例如“@latest”。可执行文件安装在由 GOBIN 环境变量命名的目录中,如果未设置 GOPATH 环境变量,则默认为 HOME/go/bin。 GOROOT/bin 或 GOBIN 中。如果参数没有版本后缀,“go install”可能会在模块感知模式或 GOPATH 模式下运行,具体取决于 GO111MODULE 环境变量和 go.mod 文件的存在。如果启用了模块感知模式,“go install”将在主模块的上下文中运行。当模块感知模式被禁用时,其他软件包安装在目录 GOOS_$GOARCH 中。启用模块感知模式后,会构建和缓存其他包,但不会安装。 -i 标志也安装命名包的依赖项。 -i 标志已弃用。编译的包会自动缓存
usage: go install [build flags] [packages]
go build
编译由导入路径命名的包及其依赖项,但不安装结果。如果要构建的参数是来自单个目录的 .go 文件列表,则 build 将它们视为指定单个包的源文件列表。编译包时,build 会忽略以 '_test.go' 结尾的文件。编译单个主包时,build 将生成的可执行文件写入以第一个源文件命名的输出文件('go build ed.go rx.go' 写入 'ed' 或 'ed.exe')或源代码目录( 'go build unix/sam' 写入 'sam' 或 'sam.exe')。编写 Windows 可执行文件时会添加“.exe”后缀。当编译多个包或单个非主包时, build 编译包但丢弃生成的对象,仅用作检查包是否可以构建
usage: go build [-o output] [build flags] [packages]
go help gopath
Go PATH 用于解析导入语句。 GOPATH 环境变量列出了查找 Go 代码的位置。在 Unix 上,该值是一个冒号分隔的字符串。在 Windows 上,该值是以分号分隔的字符串。如果未设置环境变量,则 GOPATH 默认为用户主目录中名为“go”的子目录(Unix 上为 $HOME/go,Windows 上为 %USERPROFILE%\go),除非该目录包含 Go 发行版。运行“go env GOPATH”查看当前的 GOPATH.
GOPATH 中列出的每个目录都必须具有规定的结构: src 目录包含源代码。 src 下面的路径决定了导入路径或可执行文件名。 pkg 目录包含已安装的软件包对象。与 Go 树一样,每个目标操作系统和架构对都有自己的 pkg 子目录(pkg/GOOS_GOARCH)。如果 DIR 是 GOPATH 中列出的目录,则可以将源位于 DIR/src/foo/bar 的包导入为“foo/bar”,并将其编译后的形式安装到“DIR/pkg/GOOS_GOARCH/foo/bar.a” ”。 bin 目录保存已编译的命令。每个命令都以其源目录命名,但只是最后一个元素,而不是整个路径。也就是说,source 位于 DIR/src/foo/quux 的命令安装到 DIR/bin/quux,而不是 DIR/bin/foo/quux。 “foo/”前缀被去除,以便您可以将 DIR/bin 添加到 PATH 以获取已安装的命令。如果设置了 GOBIN 环境变量,命令将安装到它命名的目录而不是 DIR/bin。 GOBIN 必须是绝对路径。
module
使用模块时,GOPATH 不再用于解析导入。但是,它仍然用于存储下载的源代码(在 GOPATH/pkg/mod 中)和编译的命令(在 GOPATH/bin 中)。
vendor
Go 1.6 支持使用外部依赖项的本地副本来满足这些依赖项的导入,通常称为供应商。名为“vendor”的目录下的代码只能通过以“vendor”的父级为根的目录树中的代码导入,并且只能使用省略前缀直到并包括 vendor 元素的导入路径。
go help packages
许多命令适用于一组包: go action [packages] 通常,[packages] 是导入路径的列表。作为根路径或以 .或 .. 元素被解释为文件系统路径并表示该目录中的包。否则,导入路径 P 表示在 GOPATH 环境变量中列出的某些 DIR 目录 DIR/src/P 中找到的包
go help importpath
导入路径(表示存储在本地文件系统中的包。通常,导入路径表示标准包(例如“unicode/utf8”)或在其中一个工作空间中找到的包。相对导入路径 以 ./ 或 ../ 开头的导入路径称为相对路径。工具链以两种方式支持相对导入路径作为快捷方式.绝对路径导入,一般用于导入第三方依赖的项目
go help modules
模块是 Go 管理依赖项的方式。模块是一起发布、版本控制和分发的包的集合。模块可以直接从版本控制存储库或模块代理服务器下载。