Go does separate compilation, it's an extremely important property for Go.
Go code can be built as a shared library, loadable by both C or Go code, albeit this is an unusual use case for Go.
However, when multiple Go shared objects are to be linked together, they must share the same Go version, including the toolchain version, so there is no forward compatibility.
So if there is a package in common such that an implementation change could cause something like a cgshape change, well the cgshape change won't matter since any implementation change will change the package's build-hash. And so everything will need recompiled anyway, regardless of whether the cgshape changed or not.
I suppose there's always RPC-like options.