I said, you do not wan't to do it yourself. Even in C there is better meta programming possible than in Go.
There is a lot of boilerplate to be done for each module and for every function in it. In Go you have to copy and paste (with very slight and subtile modifications) for every single function. All the things usually done by the C macros have to be done by you in go. At least with my level of knowledge.
So if I really wanted to create such a thing (which I explicitely do not want to do), I'd start with a tool with creates the boilerplate code.
If you want to do something in Go, make it a Port, if you want it to be a NIF do it in C, C++, or Rust.