创作人 Leo
编辑时间 Sun Nov 29,2020 at 09:30
在$GOPATH目录下有三个目录
bin:自动生成,保存 install 指令生成的二进制可执行程序
pkg:自动生成,保存非可执行程序(没有main包)的库文件
src:手动创建,保存程序源码
golang 包路径为 $GOPATH/src
例如:
package test
import(
"github.com/phpxin/gotest"
)
对应本地路径为:$GOPATH/src/github.com/phpxin/gotest
main 函数必须且只能在 package main 中声明
init 包括main在内的每个包可以有一个init函数
main 和 init 函数为go进程自动调用
go build:编译软件
例:go bulid github.com/phpxin/gotest
由于 github.com/phpxin/gotest 已经$GOPATH/src 中,所以可以在任意位置执行该指令,go build 指令会自动找到该包位置
go install:编译软件,并将结果安装到合适位置,比如可执行文件移动到 $GOPATH/bin,库文件移动到 $GOPATH/pkg
例:go install github.com/phpxin/gotest
go clean:清除编译后的文件
在某系OSX系统(比如10.13),会出现执行go编译后的文件出现 “Killed: 9” ,解决方法:
go install -ldflags=“-w -s” github.com/phpxin/gotest
加入动态参数可以改变程序内部变量
比如我们需要在编译时加入程序版本号
package main
import "fmt"
var (
buildVer = ""
)
// 在编译后的文件进行可执行文件连接是加入动态参数
// 参考 https://studygolang.com/articles/23900
// go build -ldflags "-X main.buildVer=1.0" .
func main() {
fmt.Println(buildVer)
}
console
$ go build -ldflags "-X main.buildVer=1.0" .
$ ./buildtest
1.0
参考:
golang编译时的参数传递(gcflags, ldflags)
golang 在编译时也是需要逐个编译源文件,然后在通过连接将其生成为单个可执行文件
可以把 go build 当成一个批处理工具,帮助我们编译连接
就像我们在开发 c 语言程序时,需要编写 Makefile 处理编译连接一样,go build 提供了一个规范化的程序生成工具