go
命令的作用取决于我们是针对“普通”包还是针对特殊"main"
包运行它。
对于普通包
go build
构建你的包然后丢弃结果。go install
构建然后将包安装$GOPATH/pkg
在您的目录中。
对于命令(main包
)
go build
构建命令并将结果保留在当前工作目录中。go install
在临时目录中构建命令,然后将其移动到$GOPATH/bin
.
传递给什么go build
?
您可以将想要构建的包传递给go build
。您还可以传递单个目录中的文件列表.go
,然后将其视为指定单个包的源文件列表。
如果未提供包(导入路径),则构建将应用于当前目录。
导入路径可能包含一个或多个"..."
通配符(在这种情况下它是一个模式)。 ...
可以匹配任何字符串,例如net/...
匹配net
包及其任何子文件夹中的包。命令
go build ./...
经常用于在当前文件夹中构建包以及向下递归的所有包。在项目根目录中发出的此命令将构建完整的项目。
有关指定包的更多信息,请运行go help packages
.
关于模块
Go 1.11 中引入了对 Go 模块的初步支持,从 Go 1.13 开始模块成为默认设置。当go
从包含go.mod
文件的文件夹(或当前文件夹的父文件夹之一)运行该工具时,该go
工具以模块感知模式运行(旧模式称为GOPATH 模式)。
在模块感知模式下,GOPATH 不再定义构建期间导入的含义,但它仍然存储下载的依赖项(在 GOPATH/pkg/mod 中)和安装的命令(在 GOPATH/bin 中,除非设置了 GOBIN)。
构建模块时,构建的内容由构建列表指定。构建列表最初仅包含主模块(包含运行命令的目录的模块go
),并且主模块的依赖项会递归地添加到构建列表中(依赖项的依赖项也会被添加)。
有关更多信息,请运行go help modules
.
基本上,您可以用作go build
检查是否可以构建包(及其依赖项),同时go install
还(永久)将结果安装在$GOPATH
.
go build
如果一切正常,它将默默终止,如果无法构建/编译包,则会给出错误消息。
每当该go
工具安装软件包或二进制文件时,它也会安装它所具有的任何依赖项,因此运行时go install
还将自动安装您的程序所依赖的软件包(公开可用的“go gettable”软件包)。
首先,请阅读官方的如何编写 Go 代码页面。
有关该工具的更多信息go
:命令 go
您还可以通过运行以下命令获得更多帮助:
go help build
还值得注意的是,从 Go 1.5 开始还删除了( sourcego install
)创建的可执行文件:go build
如果“go install”(不带参数,表示当前目录)成功,请删除“go build”编写的可执行文件(如果存在)。这可以避免留下陈旧的二进制文件......
要完成该列表,go run
请将应用程序编译到临时文件夹中,然后启动该可执行二进制文件。当应用程序退出时,它会正确清理临时文件。