背景
最近有个小伙伴离职了,他的项目交接给我了,项目里使用了 Go 的 wire 库进行编译时依赖注入,那就要装 wire 库咯。
原本想的直接使用 go get github.com/google/wire/cmd/wire
就可以在 GOPATH/bin
下生成 wire.exe
就可以了,结果被墙了,在 golang.org/x/tools
下载上欲仙欲死,我自己去 github
上把 /x/tools
手动下载下来都没用,开了 VPN
也没用,就去 github
上把 wire
源码 git
下来了,附 wire
Github 地址,准备在本地编译,结果编译出来的 wire.exe
一运行 wire
命令 就报 此文件的版本与正在运行的 windows 版本不兼容,请联系开发者。编译的各种参数都没问题,就是不成功,吐血。
因为 Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。就想换个思维,在 Linux 上编译 Windows 的版本,复制到 GOPATH/bin
下使用。
交叉编译
Mac下编译
Mac 下编译 Linux 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux下编译
Linux 下编译 Mac 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows下编译
Windows 下编译 Mac 和 Linux 可执行程序
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64
go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64
go build main.go
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它
验证
把 Linux 上生成好的 wire.exe
下载复制到我本地 GOPATH/bin
目录下,进入项目,在根目录删除掉原来的 wire_gen.go
文件,执行 wire
命令,重新生成了 wire_gen.go
文件,项目运行正常,大功告成!