与GO共享.Net库

I'm looking for a way to write a GO application that use a .NET UI. Or the other way around, a .Net application that calls into a GO library.

Is there anyway to P'Invoke GO, or ".Net'Invoke" from GO?

If not, what is the best performing alternative? The best idea I have right now is RPC.

It is possible to host a .NET CLR in-process. You could in theory write a DLL callable from C, which could host such a CLR.

e.g. This example project demonstrates creating a CLR inside of a C++ application.

If you bundle together the required state (e.g. ICLRRuntimeInfo et al.) into a struct, you should be able to call the equivalents from a DLL written in C, and return a 'handle' or some such other wrapper to your Go application.

What is not entirely clear from the documentation is

  • Whether it's legal for an assembly loaded in another process to perform these calls (vs. the process itself)
  • Whether C++ is mandatory instead of C (doesn't seem to be the case, but I have not attempted the above and there are some 'suspicious' declarations in some of the example code w.r.t vanilla C)