当前位置: 首页 > 面试题库 >

什么去构建?(进行构建与进行安装)

司马宏茂
2023-03-14
问题内容

新的Go程序员经常不了解或困惑基本的Go构建命令的功能。

go buildgo install命令的确切构建方式是什么,它们将结果/输出放在何处?


问题答案:

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工具的更多信息: Command go

您还可以通过运行以下命令获得更多帮助:

go help build

还值得注意的是,从Go 1.5开始,go install还会删除go build(source)创建的可执行文件:

如果成功执行“ go install”(不带参数,表示当前目录),请删除“ go
build”编写的可执行文件(如果存在)。这样可以避免留下过时的二进制文件…

要完成该列表,go run请将您的应用程序编译到一个临时文件夹中,然后启动该可执行二进制文件。当应用退出时,它会正确清理临时文件。

戴夫·切尼(Dave Cheney)的著作《如何建造》启发了这个问题。



 类似资料:
  • Rx 不包含任何的外部依赖 下面是当前支持的选项: 手动方式 打开 Rx.xcworkspace,选择 RxExample 并且打开运行。这个方式会构建所有代码并且可以运行示例App CocoaPods :warning: # Podfile use_frameworks! target 'YOUR_TARGET_NAME' do pod 'RxSwift', '~> 2.0'

  • 我使用和gradle构建失败,错误如下。 失败:生成失败,出现异常。 > 出错原因:任务“:app:predebugbuild”执行失败。 在https://help.gradle.org获得更多帮助 在1s中生成失败

  • 问题内容: 使用git“标记”构建时,jenkins上有一个选项。 这是做什么用的,我该如何使用?我假设我可以在该版本中标记构建,但是我正在努力寻找如何推送该标记的方法-除非我可以按下该标签,否则它不会那么有用。 问题答案: 您并不总是希望推送 所有 构建标记,因为根据构建周期的不同,可能会有很多构建标记。 但是,任何任务调度程序(例如Jenkins)都将标记构建,以防您想返回到特定代码并对其进行

  • 问题内容: 如何在中指定多阶段构建? 对于每个变体(例如dev,prod …),我都有一个包含2个docker文件的多阶段构建: 开发人员:+ 或产品:+ 文件(所有变体通用): 档案: 档案: 没有docker-compose,我可以构建为: 根据compose-file doc,我可以指定要构建的Dockerfile。 但是,如何在其中指定2个Dockerfile (用于多阶段构建)? 问题答

  • 问题内容: 我想调试带有测试的Eclipse构建。我试图通过运行>调试配置> Maven Build来运行它。在Base目录中是我的Maven repo目录,带有pom.xml文件,在目标“全新安装”中。当我单击debug时,Eclipse开始构建,运行测试,但它不会在断点处停止。 问题答案: 我发现最简单的方法是: 右键项目 调试为-> Maven构建 … 在目标字段中, 输入-Dmaven.s

  • 什么控制Intellij IDEA IDE构建/重建如何使用渐变构建缓存和并行选项? 我有gradle构建缓存设置,如果我通过IDEA runConfiguration运行gradle,我会看到以下内容: 如果我点击锤子建造或选择 建造 :重建,我看到的时间是2m10s及以上。 在命令行上,通过runConfiguration,速度提升非常好。当通过Intellij的锤子构建时,速度要慢得多