共享库中的 init() 函数不是 运行?

init() function not run in shared library?

我正在使用 -buildmode=c-shared 构建我的包,发现导入包中的 init() 函数似乎不是 运行。这是有意为之的行为,一个错误,还是我只是愚蠢? 我在 linux/amd64 上使用 go1.13.7。有问题的函数如下所示:

func init() {
    jsonrpc.HandleFunc("create-context", ContextHandler)
}

jsonrpc 是我编写的一个包,该函数向那里的未导出的全局映射添加了一个条目。

我试过:

package main

import "C"

import "fmt"

func init() {
        fmt.Println("in init")
}

//export Yo
func Yo() {
        fmt.Println("that's what's up")
}

func main() {
        fmt.Println("vim-go")
}

有了 go build -buildmode=c-shared lib.go 我得到了一个 lib.h

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

int main() {
    Yo();
}

我编译了:gcc -o client main.c ./lib.so

我得到了一个:

in init
that's what's up

所以在我看来它有效。