What's the proper way to cross-compile Go snaps?

There are a few issues with cross-compiling with snapcraft 3.X and using bases. See my reply at Cross compile snap on amd64 to arm for a more thorough explanation, however it does seem that using --destructive-mode is a sufficient workaround for your use case.

For the time being, I’d recommend going with one of the options that @popey mentioned.