Go编译工具命令
<h1 id="go编译工具">Go编译工具</h1><h2 id="go-build-编译文件">go build <编译文件></h2>
<table>
<thead>
<tr>
<th>附加参数</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>-v</td>
<td>编译时显示包名</td>
</tr>
<tr>
<td>-p n</td>
<td>开启并发编译,默认情况下该值为 CPU 逻辑核数</td>
</tr>
<tr>
<td>-a</td>
<td>强制重新构建</td>
</tr>
<tr>
<td>-n</td>
<td>打印编译时会用到的所有命令,但不真正执行</td>
</tr>
<tr>
<td>-x</td>
<td>打印编译时会用到的所有命令</td>
</tr>
<tr>
<td>-race</td>
<td>开启竞态检测</td>
</tr>
</tbody>
</table>
<pre><code class="language-shell"># 无参数模式
$ go build
# build 多文件
$ go build f1.go f2.go ...
$ go build .
# build 特定包
$ go build package/xxx
</code></pre>
<h2 id="go-clean--清除编译文件">go clean<清除编译文件></h2>
<table>
<thead>
<tr>
<th>附加参数</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>-i</td>
<td>清除关联的安装的包和可运行文件,也就是通过<code>go install</code>安装的文件</td>
</tr>
<tr>
<td>-n</td>
<td>把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的;</td>
</tr>
<tr>
<td>-r</td>
<td>循环的清除在 import 中引入的包</td>
</tr>
<tr>
<td>-x</td>
<td>打印出来执行的详细命令,其实就是 -n 打印的执行版本</td>
</tr>
<tr>
<td>-cache</td>
<td>删除所有<code>go build</code>命令的缓存</td>
</tr>
<tr>
<td>-testcache</td>
<td>删除当前包所有的测试结果</td>
</tr>
</tbody>
</table>
<h2 id="go-run-运行不产生编译文件">go run <运行不产生编译文件></h2>
<p><code>go run</code>不会在运行目录下生成任何文件,可执行文件被放在临时文件中被执行,工作目录被设置为当前目录。在<code>go run</code>的后部可以添加参数,这部分参数会作为代码可以接受的命令行输入提供给程序</p>
<p><code>go run</code>不能使用“go run+包”的方式进行编译,如需快速编译运行包,需要使用如下步骤来代替:</p>
<ol>
<li>使用<code>go build</code>生成可执行文件。</li>
<li>运行可执行文件。</li>
</ol>
<h2 id="gofmt-格式化代码">gofmt <格式化代码></h2>
<table>
<thead>
<tr>
<th>标记名称</th>
<th>标记描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>-l</td>
<td>仅把那些不符合格式化规范的、需要被命令程序改写的源码文件的绝对路径打印到标准输出。而不是把改写后的全部内容都打印到标准输出。</td>
</tr>
<tr>
<td>-w</td>
<td>把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。</td>
</tr>
<tr>
<td>-r</td>
<td>添加形如“a -> a”的重写规则。如果我们需要自定义某些额外的格式化规则,就需要用到它。</td>
</tr>
<tr>
<td>-s</td>
<td>简化文件中的代码。</td>
</tr>
<tr>
<td>-d</td>
<td>只把改写前后内容的对比信息作为结果打印到标准输出。而不是把改写后的全部内容都打印到标准输出。 命令程序将使用 diff 命令对内容进行比对。在 Windows 操作系统下可能没有 diff 命令,需要另行安装。</td>
</tr>
<tr>
<td>-e</td>
<td>打印所有的语法错误到标准输出。如果不使用此标记,则只会打印每行的第 1 个错误且只打印前 10 个错误。</td>
</tr>
<tr>
<td>-comments</td>
<td>是否保留源码文件中的注释。在默认情况下,此标记会被隐式的使用,并且值为 true。</td>
</tr>
<tr>
<td>-tabwidth</td>
<td>此标记用于设置代码中缩进所使用的空格数量,默认值为 8。要使此标记生效,需要使用“-tabs”标记并把值设置为 false。</td>
</tr>
<tr>
<td>-tabs</td>
<td>是否使用 tab('\t')来代替空格表示缩进。在默认情况下,此标记会被隐式的使用,并且值为 true。</td>
</tr>
<tr>
<td>-cpuprofile</td>
<td>是否开启 CPU 使用情况记录,并将记录内容保存在此标记值所指的文件中。</td>
</tr>
</tbody>
</table>
<h2 id="go-install-编译安装">go install <编译安装></h2>
<pre><code class="language-sh">$ go install
# go install 是建立在 GOPATH 上的,无法在独立的目录里使用 go install。
# GOPATH 下的 bin 目录放置的是使用 go install 生成的可执行文件,可执行文件的名称来自于编译时的包名。
# go install 输出目录始终为 GOPATH 下的 bin 目录,无法使用-o附加参数进行自定义。
# GOPATH 下的 pkg 目录放置的是编译期间的中间文件。
</code></pre>
<h2 id="go-get-安装依赖">go get <安装依赖></h2>
<table>
<thead>
<tr>
<th>附加参数</th>
<th>备注</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>-v</td>
<td>显示操作流程的日志及信息,方便检查错误</td>
<td></td>
</tr>
<tr>
<td>-u</td>
<td>下载丢失的包,但不会更新已经存在的包</td>
<td></td>
</tr>
<tr>
<td>-d</td>
<td>只下载,不安装</td>
<td></td>
</tr>
<tr>
<td>-insecure</td>
<td>允许使用不安全的 HTTP 方式进行下载操作</td>
<td></td>
</tr>
<tr>
<td>-f</td>
<td>只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用</td>
<td></td>
</tr>
<tr>
<td>-fix</td>
<td>在获取源码之后先运行 fix,然后再去做其他的事情</td>
<td></td>
</tr>
<tr>
<td>-t</td>
<td>同时也下载需要为运行测试所需要的包</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="go-generate-编译前自动执行代码">go generate <编译前自动执行代码></h2>
<p>使用<code>go generate</code>命令时有以下几点需要注意:</p>
<ul>
<li>该特殊注释必须在 .go 源码文件中;</li>
<li>每个源码文件可以包含多个 generate 特殊注释;</li>
<li>运行<code>go generate</code>命令时,才会执行特殊注释后面的命令;</li>
<li>当<code>go generate</code>命令执行出错时,将终止程序的运行;</li>
<li>特殊注释必须以<code>//go:generate</code>开头,双斜线后面没有空格。</li>
</ul>
<p><code>go generate</code>命令格式如下所示:</p>
<pre><code class="language-sh">go generate [-run regexp] [-n] [-v] [-x]
</code></pre>
<ul>
<li>-run 正则表达式匹配命令行,仅执行匹配的命令;</li>
<li>-v 输出被处理的包名和源文件名;</li>
<li>-n 显示不执行命令;</li>
<li>-x 显示并执行命令;</li>
<li>command 可以是在环境变量 PATH 中的任何命令。</li>
</ul>
<p>执行<code>go generate</code>命令时,也可以使用一些环境变量,如下所示:</p>
<ul>
<li>$GOARCH 体系架构(arm、amd64 等);</li>
<li>$GOOS 当前的 OS 环境(linux、windows 等);</li>
<li>$GOFILE 当前处理中的文件名;</li>
<li>$GOLINE 当前命令在文件中的行号;</li>
<li>$GOPACKAGE 当前处理文件的包名;</li>
<li>$DOLLAR 固定的<code>$</code>,不清楚具体用途。</li>
</ul>
</div>
<div id="MySignature" role="contentinfo">
Songzhibin<br><br>
来源:https://www.cnblogs.com/binHome/p/14845617.html
頁:
[1]