今天咱们不说go的语法知识,为什么不说语法了呢?因为咱们做了这么就的go东西全是在编辑器中运行的,大家是不是很想知道怎么在编辑器之外去执行go程序呢?(win的.exe文件 linux ./xx)…
好了进入今天的正题golang build命令解析篇章吧
go build 是我们非常常用的命令,通过编译之后就能生成不依赖与我们当前环境的可执行文件。我们来看一下这个命令的简单使用
简单的解析一下上文:这个是基于lz的实例我们有多个包每个里面都是main。我们cd进入div这个包中分别执行啦go build go build . go build index.go我们来看看结果
其中 div 执行文件是由前两个命令生成的 index是最后一个命令生成的。也就是是说build会自动找寻main包的main所在的文件然后以包名命名,当指定了main所在文件则以执行文件命名
目前我们的执行文件是按照我们当前环境的编译出来的,那么怎么实现go编译出执行文件分发给Linux windows呢?在这之前我们看看本地的编译环境
bogon:GitHub sk$ go envGOARCH="amd64"GOBIN="/Users/sk/Documents/GoProjects/gopath/bin"GOCACHE="/Users/sk/Library/Caches/go-build"GOEXE=""GOFLAGS=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOPATH="/Users/sk/Documents/GoProjects/gopath"GOPROXY=""GORACE=""GOROOT="/usr/local/go"GOTMPDIR=""GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"GCCGO="gccgo"CC="clang"CXX="clang++"CGO_ENABLED="1"GOMOD=""CGO_CFLAGS="-g -O2"CGO_CPPFLAGS=""CGO_CXXFLAGS="-g -O2"CGO_FFLAGS="-g -O2"CGO_LDFLAGS="-g -O2"PKG_CONFIG="pkg-config"GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/j8/gjsvql2x5gb4gyl227l0mhnm0000gn/T/go-build695467410=/tmp/go-build -gno-record-gcc-switches -fno-common"
我们看到上文中有一大把的参数其中跟我们平台有关的为
GOARCH="amd64" GOOS="darwin"其中GOARCH指定的是指令集,GOOS指定的是平台:
GOOS
darwin
freebsd
linux
windows
android
dragonfly
netbsd
openbsd
plan9
solaris
GOARCH
arm
arm64
386
amd64
ppc64
ppc64le
mips64
mips64le
s390x
了解了基本的编译指令我们来进行一下实践
macOS
GOOS=darwin GOARCH=amd64 go build ./div/index.go
windows
GOOS=windows GOARCH=386 go build ./div/index.go
Linux
GOOS=linux GOARCH=amd64 go build ./div/index.go
macOS本身就是Linux我们就分别编译之后执行啦