Функция init () не запущена в общей библиотеке? - PullRequest
0 голосов
/ 17 февраля 2020

Я собираю свой пакет с -buildmode=c-shared и обнаруживаю, что функции init () в импортированных пакетах, похоже, не запускаются. Это намеренное поведение, ошибка или я просто глуп? Я использую go1.13.7 на Linux / AMD64. Рассматриваемая функция выглядит следующим образом:

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

jsonrp c - это пакет, который я написал, и функция добавляет туда запись для неэкспортированной глобальной карты.

1 Ответ

1 голос
/ 17 февраля 2020

Я пытался с:

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

Так что мне кажется, что это работает.

...