好运一直都在 發表於 2019-11-22 15:06:00

go build、go install、go get命令详解

<p>(内容凌乱,日后整理!)</p>
<p>原文链接:https://blog.csdn.net/zhangliangzi/article/details/77914943</p>
<hr>
<p>&nbsp;GO下载:</p>
<p><em id="__mceDel">GO语言中文网下载:https://studygolang.com/dl<br>Mac下直接通过brew instatll go指令即可完成下载安装</em></p>
<hr>
<p>&nbsp;</p>
<p>GO环境变量配置:<br>$GOROOT=/usr/local/go&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;GO安装目录<br>$GOPATH=/usr/local/var/www/go &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;GO工作目录<br>$GOBIN=$GOPATH/bin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;GO可执行文件目录<br>$PATH=$PATH:$GOBIN:$GOROOT/bin &nbsp;将GO可执行文件加入PATH中,使GO指令与我们编写的GO应用可以全局调用</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122145928249-614660093.png" alt=""></p>
<hr>
<p>&nbsp;$GOPATH工作目录结构,约定有三个子目录(需要自行创建):</p>
<p><em id="__mceDel">src ——存放源代码文件<br>pkg——存放编译后的文件<br>bin ——存放编译后的可执行文件</em></p>
<hr>
<p>&nbsp;</p>
<p>示例(首先使用go推荐的go build方式构建应用,稍后会说到其他的方式):<br>通过我们的操作,在最终测试成功后,$GOPATH的目录树应该如下所示:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122145835230-512755123.png" alt="" width="368" height="290"><br>具体操作如下:<br>1、创建应用包mypkg:切到【$GOPATH/src】目录下,创建一个mypkg目录,在mypkg目录下,新建一个hello.go,内容如下:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150036288-758826561.png" alt=""></p>
<p><br>2、编译应用包(在此Demo中,此步骤并不必要,在此只是为了展示go install编译效果):在刚刚的目录下执行【go install】指令或者在任意目录下执行【go install mypkg】指令,如果代码有错或依赖找不到会报错,如果正确则没有任何提示。此时,你可以切到【$GOPATH/pkg】目录下,会发现多了一个名为【$GOOS_$GOARCH】的目录,切进该目录,就会看到刚刚编译生成的文件mypkg.a文件。(其中$GOOS与$GOARCH的具体值可以通过【go env】指令查询,更多详情可参看:http://wiki.jikexueyuan.com/project/go-command-tutorial/0.14.html)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150054824-1723349963.png" alt="" width="560" height="130"></p>
<p><br>3、创建新应用包myapp,创建新文件main.go(同步骤1),import引入mypkg包,内容如下:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150118462-609477363.png" alt="" width="1064" height="234"></p>
<p><br>4、构建可执行文件:在myapp目录下,使用【go build】指令,会在当前目录下生成一个myapp的可执行文件,这个可执行文件不依赖其他文件,复制到任何目录下都可通过【./myapp】执行,复制到任何$PATH配置的目录中都可通过【myapp】全局执行。</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150143148-2020176695.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150154277-1034821263.png" alt=""></p>
<p>总结:我们在这个Demo里主要用到了两个GO指令,【go install】与【go build】,他们的区别如下:<br>【go build】指令的作用是:在当前目录下编译生成可执行文件。注意,go build指令会调用所有引用包的源码,重新编译,而不是直接使用pkg里的编译后文件,如果在【$GOROOT】与【$GOPATH】下没有找到import引入包的项目源码,就会报错。在本demo里main.go中import引入了"mypkg"包,如果我删除【$GOPATH/src/mypkg】源码,执行【go build】指令,会报错如下:</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150401770-229266815.png" alt=""></p>
<p>【go install】指令的作用是:编译源代码,如果为可执行文件(package "main"且包含main方法),则会编译生成可执行文件到【$GOPATH/bin】目录下;可执行文件import引入的其他包,就会被编译到【$GOPATH/pkg/$GOOS_$GOARCH】目录下。<br>(关于go的导入和编译,如果有不清楚的,可以看下这篇博客https://studygolang.com/articles/3189)</p>
<p>我们会发现:【go install】也可以完成类似【go build】的功能,区别在于【go install】会生成二进制文件到【$GOPATH/pkg/$GOOS_$GOARCH】目录下(这个二进制文件对于我们并没什么意义),但【go install】会把可执行文件自动生成到【$GOBIN】目录下,这是在一开始被配置到【$PATH】中了,这样就可以使项目可执行文件能被方便的全局调用。</p>
<p>如果在本Demo中,使用【go install】构建可执行文件:<br>我们编写好源代码文件时,目录树如下:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150415536-654404387.png" alt="" width="359" height="215"></p>
<p>&nbsp;切到myapp目录下,执行【go install】指令,会生成如下结构目录树:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191122150519665-1237050453.png" alt="" width="338" height="295"></p>
<p>&nbsp;此时就可以通过【myapp】全局执行了!</p>
<p><span style="font-size: 18px; background-color: rgba(255, 0, 0, 1)"><strong>go get 可以暂时理解为git clone到&nbsp; $GOPATH/src&nbsp; + go install</strong></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191124220333012-749956101.png" alt=""></strong></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 18px"><strong><img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191124220408411-1155106258.png" alt=""></strong></span></p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1389182/201911/1389182-20191124224323324-300351275.png" alt=""></p>

</div>
<div id="MySignature" role="contentinfo">
    ///纵有疾风起,人生不言弃///<br><br>
来源:https://www.cnblogs.com/skzxc/p/11911635.html
頁: [1]
查看完整版本: go build、go install、go get命令详解