《Go 命令教程》笔记
go build
-
用于编译我们指定的源码文件或代码包以及它们的依赖包
-
构建多个源码的时候以空格分开
-
go build 命令既不能编译包含多个命令源码文件的代码包,也不能同时编译多个命令源码文件
-
如果我们有多个声明为属于 main包的源码文件,且其中只有一个文件声明了main函数的话,那么 是可以使用 go build 命令同时编译它们的。在这种情况下,不包含main函数声明的那几个源码文件会被视为库源 码文件。如此编译之后的结果文件的名称将会与我们指定的编译目标中最左边的那个源码文件的主文件名相同。
//方法一:
//在源码所在目录下执行
go build
//或在src目录下执行
go build 源码所在目录
注意:
go build
命令在编译只包含库源码文件的代码包(或者同时编译多个代码包)时,只会做检查性的编译,而 不会输出任何结果文件。
标记名称 | 描述 |
-v |
打印出那些被编译的代码包的名字
|
-o |
标记可以指定输出文件(在这个示例中指的是可执行文件)的名称,但使用标记 -o 的时候,不能同时对多个代码包进行编译。
|
-i |
安装那些编译目标依赖的且还未被安装的代码包
|
-a |
强行对所有涉及到的代码包(包含标准库中的代码包)进行重新构建,即使它们已经是最新的了。
|
-n |
打印编译期间所用到的其它命令,但是并不真正执行它们。
|
-p n
|
指定编译过程中执行各任务的并行数量(确切地说应该是并发数量)。在默认情况下,该数量等于CPU 的逻辑核数。但是在 darwin/arm 平台(即iPhone和iPad所用的平台)下,该数量默认是 1 。
|
-race |
开启竞态条件的检测。不过此标记目前仅 在 linux/amd64 、 freebsd/amd64 、 darwin/amd64 和 windows/amd64 平台下受到支持。
|
-work |
打印出编译时生成的临时工作目录的路径,并在编译结束时保留它。在默认情况下,编译结束时会删除该目录。
|
-x |
打印编译期间所用到的其它命令。注意它与 -n 标记的区别。
|
-asmflags |
此标记可以后跟另外一些标记( -D 、 -I 、 -S)。这些后跟的标记用于控制Go语言编译器编译汇编语言文 件时的行为。
|
-buildmode
|
此标记用于指定编译模式,使用方式-buildmode=default(这等同于默认情况下的设置)。此标记支持的编译模式
目前有6种。
|
-compiler
|
此标记用于指定当前使用的编译器的名称。其值可以为 gc 或 gccgo 。其中,gc编译器即为Go语言自带的编辑
器,而gccgo编译器则为GCC提供的Go语言编译器。
|
-gccgoflags
|
此标记用于指定需要传递给gccgo编译器或链接器的标记的列表。
|
-gcflags
|
此标记用于指定需要传递给 go tool compile 命令的标记的列表。
|
-installsuffix
|
为了使当前的输出目录与默认的编译输出目录分离,可以使用这个标记。此标记的值会作为结果文件的父目录名称的后缀。其实,如果使用了 -race 标记,这个标记会被自动追加且其值会为 race 。如果我们同时使用了 -race 标 记和 -installsuffix ,那么在 -installsuffix 标记的值的后面会再被追加 _race ,并以此来作为实际使用的后 缀。
|
-ldflags
|
此标记用于指定需要传递给 go tool link 命令的标记的列表。
|
-linkshared
|
此标记用于与 -buildmode=shared 一同使用。后者会使作为编译目标的非 main 代码包都被合并到一个动态链接库文件中,而前者则会在此之上进行链接操作。
|
-pkgdir
|
使用此标记可以指定一个目录。编译器会只从该目录中加载代码包的归档文件,并会把编译可能会生成的代码包归档
|
-tags
|
此标记用于指定在实际编译期间需要受理的编译标签(也可被称为编译约束)的列表。这些编译标签一般会作为源码文件开始处的注释的一部分。
|
-toolexec
|
此标记可以让我们去自定义在编译期间使用一些Go语言自带工具(如 vet 、 asm 等)的方式。
|
go install
-
用于编译并安装指定的代码包及它们的依赖包。
-
go build 命令的绝大多数标记也都可以用于 go install 命令
-
go build 命令的绝大多数标记也都可以用于 go install 命令。实际上, go install 命令只比 gobuild 命令多做了一件事,即:安装编译后的结果文件到指定目录
-
如果 go install 命令后跟的代码包中仅包含库源码文件,那么 go install 命令会把编译后的结果文件保存在源码文件所在工作区的pkg目录下。
-
go install 命令在安装指定的代码包之前,会先去安装指定代码包的依赖包。当依赖包被正确安装后,指定的代码包的安装才会开始
go get
-
可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
- go get 命令会将项目下的所有子目录和源码文件存放到第一个工作区的src目录下,而src目录下的所有子目录都会是某个代码包导入路径的一部分或者全部。
建议:我们应该直接在项目目录下存放子代码包和源码文件,并且直接存放在项目目录下的源码文件所声明的包名应该与该项目名相同(除非它是命令源码文件)。这样做可以让其他人使用 go get 命令从Github站点上下载你的项目之后直接就能使用它。 - go get 命令不仅可以从像Github这样著名的代码托管站点上下载代码包,还可以从任何命令支持的代码版本控制系统(英文为Version Control System,简称为VCS)检出代码包。任何代码托管站点都是通过某个或某些代码版本控制系统来提供代码上传下载服务的。
- go get 命令在检出代码包之前必须要知道代码包远程导入路径所对应的版本控制系统和远程仓库的URL。
- 代码包远程导入路径中的第一个元素就是代码托管网站的主域名。在静态分析的时候, go get 命令会将代码包远程导入路径与预置的代码托管站点的主域名进行匹配。如果匹配成功,则在对代码包远程导入路径的初步检查后返回正常的返回值或错误信息。如果匹配不成功,则会再对代码包远程导入路径进行动态分析。
名称
|
主命令
|
说明
|
Mercurial
|
hg
|
Mercurial
是一种轻量级分布式版本控制系统,采用
Python
语言实现,易于学习和使
用,扩展性强。
|
Git
|
git
|
Git
最开始是
Linux Torvalds
为了帮助管理
Linux
内核开发而开发的一个开源的
分布式版本控制软件。但现在已被广泛使用。它是被用来进行有效、高速的各种规模项
目的版本管理。
|
Subversion
|
svn
|
Subversion
是一个版本控制系统,也是第一个将分支概念和功能纳入到版本控制模型的系统。但相对于Git
和
Mercurial
而言,它只算是传统版本控制系统的一员。
|
Bazaar
|
bzr
|
Bazaar
是一个开源的分布式版本控制系统。但相比而言,用它来作为
VCS
的项目并不多。
|
名称
|
主域名
|
支持的
VCS
|
代码包远程导入路径示例
|
Bitbucket
|
bitbucket.org
|
Git,
Mercurial
|
bitbucket.org/user/project
bitbucket.org/user/project/sub/directory
|
GitHub
|
github.com
|
Git
|
github.com/user/project
github.com/user/project/sub/directory
|
Google
Code
Project
Hosting
|
code.google.com
|
Git,
Mercurial,
Subversion
|
code.google.com/p/project
code.google.com/p/project/sub/directory
code.google.com/p/project.subrepository
code.google.com/p/project.subrepository/sub/dire
|
Launchpad
|
launchpad.net
| Bazaar |
launchpad.net/project
launchpad.net/project/series
launchpad.net/project/series/sub/directory
launchpad.net/~user/project/branch
launchpad.net/~user/project/branch/sub/directory
|
IBM
DevOps
Services
|
hub.jazz.net
|
Git
|
hub.jazz.net/git/user/project
hub.jazz.net/git/user/project/sub/directory
|