Go has some pretty good support/tools for cross-compiling binaries for multiple platforms/architectures. Just check the $GOOS/$GOARCH env vars listed in the official documentation.
But sometimes, you may need to use some lib/code written in C that hasn’t been ported to Go. For this reason, there’s cgo, which you can use to call C code from your Go code. And while it can be straightforward to use when you run the binaries on the same platform you used to build them, it can be a bit of a mess when cross-compiling for platforms/architectures that are different.
Though, I hope that if you continue reading, it will become just a little easier.
Prerequisites
Throughout this guide, we’ll use Docker to build our binaries, so make sure you’ve installed the following:
If everything went well, you should find the binary in ./bin/. Now just copy it to your target host and run it.
You could also build the binary on your host:
1
go build -race -o ./bin/hello cmd/hello/main.go
And run it to verify it works:
You can find the above project at rolandjitsu/go-cross. You’ll also find how to use and statically link 3rd party libraries and how to setup a simple Github workflow to test the binaries.
That’s all folks.
If you find this post helpful, please consider sponsoring.