Go code can call C functions directly using a Go extension implemented
in gccgo: a function declaration may be preceded by a
comment giving the external name.  The comment must be at the
beginning of the line and must start with //extern.  This must
be followed by a space and then the external name of the function. 
The function declaration must be on the line immediately after the
comment.  For example, here is how the C function open can be
declared in Go:
     //extern open
     func c_open(name *byte, mode int, perm int) int
   The C function naturally expects a nul terminated string, which in Go
is equivalent to a pointer to an array (not a slice!) of byte
with a terminating zero byte.  So a sample call from Go would look
like (after importing the os package):
     var name = [4]byte{'f', 'o', 'o', 0};
     i := c_open(&name[0], os.O_RDONLY, 0);
   Note that this serves as an example only.  To open a file in Go please
use Go's os.Open function instead.
   
The name of Go functions accessed from C is subject to change.  At
present the name of a Go function that does not have a receiver is
prefix.package.Functionname.  The prefix is set by the
-fgo-prefix option used when the package is compiled; if the
option is not used, the default is simply go.  To call the
function from C you must set the name using the gcc
__asm__ extension.
     extern int go_function(int) __asm__ ("myprefix.mypackage.Function");