I think Go needs a flag specified at compile time to work on ARM. Instead of `go build`, run `env GOOS=linux GOARCH=arm64 go build`.
Rust is similar, except it requires the appropriate toolchain to be installed first (1-liner).
It’s probably less effort what I’ve described because there are GitHub Actions that will generate appropriate binaries out of the box.
(This holds true for JS/python/… too.)
Just tell Go to use the appropriate cross compilation chain for the C bits, e.g. `apt install gcc-aarch64-linux-gnu` and set the `CC=aarch64-linux-gnu-gcc` environment variable to compile for arm64. Compilation becomes a bit slower, but it's still manageable.
It's that easy thanks to the foundations laid by the distribution that ships a solid cross-compiler setup (in this example, thank you Debian!) and of course the brilliance of the Go design and toolchain.
1) if their managed services (RDS, DynamoDB, etc) can run on ARM and it provides a better price/performance ratio, they'll use that internally, thus needing less x86 hardware
2) if most customers can run on ARM (interpreted languages run out of the box, compiled ones need more effort but is still doable) and it's better priced than x86 there is less demand on x86 again.