此文章仅作为个人笔记整理,参考于:blog.csdn.net/zhangliangz…
├── myapp
│ └── test.go
└── mypkg
└── hello.go
复制代码
hello.go
package mypkg
func Hello() string {
return "hello"
}
复制代码
test.go
package main
import (
"fmt"
"mypkg"
)
func main() {
fmt.Println(mypkg.Hello())
}
复制代码
cd 到 mypkg
目录下
go build
无效果go install
, 在目录$GOPATH/pkg/$GOOS_$GOARCH
下生成mypkg.a
cd 到 myapp
目录下
go build
在当前目录得到可执行文件myapp
go build test,go
在当前目录得到可执行文件test
go install
在目录$GOPATH/bin
下生成可执行文件myapp
go install test.go
在目录$GOPATH/bin
下生成可执行文件test
go build
在当前目录下编译生成可执行文件,并且调用所有引用包的源码,重新编译,而不是直接使用pkg里的编译后文件,如果在$GOROOT
与$GOPATH
下没有找到import引入包的项目源码,就会报错。在本demo里,main.go中import引入了”mypkg”包,如果我删除$GOPATH/src/mypkg
源码,执行go build
指令,会报错。
go install
编译源代码,如果为可执行文件(package “main”且包含main方法),则会编译生成可执行文件到$GOPATH/bin
目录下;可执行文件import引入的其他包,就会被编译到$GOPATH/pkg/$GOOS_$GOARCH
目录下。
go install
也可以完成类似go build
的功能,区别在于go install
会生成二进制文件到$GOPATH/pkg/$GOOS_$GOARCH
目录下(这个二进制文件对于我们并没什么意义),但go install
会把可执行文件自动生成到$GOBIN
目录下
总结:
相同点
都能生成可执行文件
不同点
go build
不能生成包文件, go install 可以生成包文件
go build
生成可执行文件在当前目录下, go install 生成可执行文件在bin目录下($GOPATH/bin)
go build
经常用于编译测试.go install主要用于生产库和工具.
——补充——
go build
: 编译出可执行文件
go install
: go build + 把编译后的可执行文件放到GOPATH/bin目录下
go get
: git clone + go install