go install 和 go build都是用来编译生成可执行的二进制文件,但二者有一些小小的区别,下面来看看它们的区别。缓存
若是新建了一个包mymath。函数
一、只要进入对应的应用包目录,而后执行go install
,就能够安装了工具
二、在任意的目录执行以下代码go install mymath
ui
若是mymath是一个工具包,那install后,会在pkg目录下生成一个mymath.a的二进制文件;spa
若是mymath是一个包含main函数的主线程代码文件,则会在bin目录下生成一个mymath的二进制文件。若是加了-i 参数,则会把程序引入的依赖包编译缓存到pkg中,若是包未作更改,下次编译则直接使用缓存。线程
直接在当前目录下,生成mymath二进制文件,不会生成依赖包的二进制文件。若是带上-i参数,则效果跟go install是同样的。调试
go编译出来的可执行文件很是大,是由于把依赖的库和程序同样编译发布的,至关于gcc --static。若是想让生成的文件变小能够用-ldflags "-s -w"参数。code
-s去掉符号表(而后panic时候的stack trace就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果),
-w去掉DWARF调试信息,获得的程序就不能用gdb调试了。
-s和-w也能够分开使用,通常来讲若是不打算用gdb调试,
-w基本没啥损失。-s的损失就有点大了。ip