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)