i think by itself is fine but stuff gets horrible if you wanna do FFI. also impossible to build other stuff and include it in the go binary / include the go binary in it, it's a very limited system and you need to wrap it in a big boy build system to be useful in nontrivial cases
cargo shares some of this, but not as much as it has build .rs, but that runs before the actual build and there's no postbuild .rs (and these aren't good build systems)
Nix and Bazel are better systems but they're still really limited, they're not dynamic build systems (see how Shake works) (nix has recursive-drvs but they're partially implemented and still suck) (bazel has some dynamicness in builtins but none of this is exposed to the user side) so what you can do is really limited. nixpkgs has targetSystem for this reason (apart from buildSystem and hostSystem, which is sane)