Сторонние библиотеки (с закрытым исходным кодом) - PullRequest
0 голосов
/ 26 апреля 2019

Есть ли способ создать двоичный файл (совместно используемую или статическую библиотеку) на языке go с набором исходных файлов и распространять его вместе с интерфейсами.

Его нельзя распространять как исполняемый файлно связываемая статическая или разделяемая библиотека с интерфейсами во время компиляции или выполнения.(Как и в C, вы распространяете файл .a или .so вместе с заголовочными файлами)

В отличие от библиотек на основе github с открытым исходным кодом, это проект с закрытым исходным кодом, который я пытаюсь портировать для Go.

1 Ответ

1 голос
/ 26 апреля 2019

Да, это возможно. Вы можете построить свой код как статическую библиотеку и связать его во время выполнения с помощью этой команды:

go build -buildmode=plugin

Вы можете использовать встроенный плагин так:

Символ - это указатель на переменную или функцию.

Например, плагин, определенный как

package main

import "fmt"

var V int

func F() { fmt.Printf("Hello, number %d\n", V) }

может быть загружено с помощью функции Open, а затем можно получить доступ к экспортированным символам пакета V и F

p, err := plugin.Open("plugin_name.so")
if err != nil {
    panic(err)
}
v, err := p.Lookup("V")
if err != nil {
    panic(err)
}
f, err := p.Lookup("F")
if err != nil {
    panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"


type Symbol interface{}

Проверьте встроенную поддержку для Плагин в Go для получения дополнительной информации

...