GoLang – 43 – Cross-compiling

Cross-Compiling in Go: Building for Different Platforms

Cross-compiling is the process of building software on one platform and generating executable files for a different target platform. In Go, cross-compilation is a straightforward task, allowing you to create binaries for various operating systems and architectures with ease. In this guide, we’ll explore the concepts of cross-compiling in Go, its significance, and how to perform it effectively.

1. Understanding Cross-Compilation

Cross-compilation is essential when you want to create executables for platforms other than the one you are currently working on. For example, you may be developing on a Windows machine but need to produce binaries for Linux or macOS. Go makes this process seamless, thanks to its built-in cross-compilation support.

2. Benefits of Cross-Compiling in Go

Cross-compiling in Go offers several advantages:

  • Platform Flexibility: You can develop on one platform and distribute your software to a wide range of target platforms.
  • Build Automation: Cross-compilation can be integrated into build scripts and automated as part of your CI/CD pipeline.
  • Testing and Verification: You can verify that your code works correctly on various platforms without needing multiple physical machines.
3. Cross-Compiling in Go

Go’s toolchain simplifies cross-compilation. You can specify the target platform using the `GOOS` (operating system) and `GOARCH` (architecture) environment variables. Here’s an example of cross-compiling a simple Go program for Linux and Windows:


# Cross-compile for Linux (64-bit)
GOOS=linux GOARCH=amd64 go build -o myapp-linux

# Cross-compile for Windows (64-bit)
GOOS=windows GOARCH=amd64 go build -o myapp-windows.exe

In this example, we set the `GOOS` and `GOARCH` variables to generate Linux and Windows executables. The `-o` flag specifies the output binary name.

4. Cross-Compiling for Multiple Platforms

You can easily cross-compile for multiple platforms by running multiple build commands. Here’s an example of cross-compiling for Linux, Windows, and macOS:


# Cross-compile for Linux (64-bit)
GOOS=linux GOARCH=amd64 go build -o myapp-linux

# Cross-compile for Windows (64-bit)
GOOS=windows GOARCH=amd64 go build -o myapp-windows.exe

# Cross-compile for macOS (64-bit)
GOOS=darwin GOARCH=amd64 go build -o myapp-macos
5. Batch Cross-Compilation

To simplify cross-compilation for multiple platforms, you can create a script or use a build automation tool like Make or Bash. Here’s an example of a Bash script for cross-compiling:


#!/bin/bash

platforms=("linux/amd64" "windows/amd64" "darwin/amd64")

for platform in "${platforms[@]}"; do
  IFS='/' read -ra arr <<< "$platform"
  GOOS="${arr[0]}"
  GOARCH="${arr[1]}"
  output="myapp-${GOOS}-${GOARCH}"

  env GOOS=$GOOS GOARCH=$GOARCH go build -o $output
done

This script iterates through the specified platforms and compiles the Go program for each one, producing separate executables.

6. Conclusion

Cross-compiling in Go is a powerful feature that enables you to build your applications for various platforms efficiently. Whether you’re targeting Linux, Windows, macOS, or other platforms, Go’s support for cross-compilation simplifies the process, making it easy to distribute your software to a wide range of users.