The current Go->Haxe code generation process actually contains two components:
1. Modelling Go-specific language features (go, chan, slice, map etc); and
2. Generating Haxe code (the big issue being modelling pointers in an OOP environment).
My proposal is to split the compilation process into these two parts, with the first phase common to all target languages and the second phase targeting more languages than just Haxe.
The intermediate format between the two phases will be an executable Go program, which will significantly simplify testing. However that transpiled intermediate Go program will not contain any language constructs that cannot be directly translated into C (as a simplicity benchmark).
My hope is that this approach will make generating code for new languages much simpler than at present, possibly simply a matter of walking the AST of the generated Go, rather than requiring a full SSA re-compilation.
In terms of optimisations, most effort can concentrate on getting the intermediate Go program as efficient as possible.
I would hope to target C, C#, Java and Haxe (the latter two being more complex because pointers must be simulated).
The generated intermediate format Go program may also be useful in other contexts, for example where called code should be sandboxed from the rest of the system and not allowed to use goroutines.
There is a great deal of detail to be worked through here, and I'm not yet even at the prototype stage, but at least the objective is clear.