There is a project on github which shows how to create a DLL, based on, and thanks to user7155193’s answer.

Basically you use GCC to build the DLL from golang generated .a and .h files.

First you make a simple Go file that exports a function (or more).

package main

import "C"
import "fmt"

//export PrintBye
func PrintBye() {
    fmt.Println("From DLL: Bye!")

func main() {
    // Need a main function to make CGO compile package as C shared library

Compile it with:

go build -buildmode=c-archive exportgo.go

Then you make a C program (goDLL.c) which will link in the .h and .a files generated above

#include <stdio.h>
#include "exportgo.h"

// force gcc to link in go runtime (may be a better solution than this)
void dummy() {

int main() {


Compile/link the DLL with GCC:

gcc -shared -pthread -o goDLL.dll goDLL.c exportgo.a -lWinMM -lntdll -lWS2_32

The goDLL.dll then can be loaded into another C program, a freepascal/lazarus program, or your program of choice.

The complete code with a lazarus/fpc project that loads the DLL is here: