Создать плагин из нескольких файлов из разных каталогов - PullRequest
4 голосов
/ 27 апреля 2019

После этого учебника и github repo я понял использование плагинов.

Учебник компилирует каждый файл отдельно в файлы so.

go build -buildmode=plugin -o eng/eng.so eng/greeter.go
go build -buildmode=plugin -o chi/chi.so chi/greeter.go

Как я могу объединить два файла в один .so файл? Я попробовал следующую команду, разделив файлы через пробел

go build -buildmode=plugin -o bin/langs.so src/test/eng/greeter.go src/test/chi/greeter.go

Ошибка:

все именованные файлы должны находиться в одном каталоге; есть src / test / eng / и SRC / тест / CHI /

Идея состоит в том, чтобы иметь один .so файл из разных пакетов.

Редактировать: Я полагаю, что последующим вопросом будет то, как объединить все .so файлы в один архив, если у вас есть несколько пакетов библиотеки, и go допускает только один .so файл на пакет.

1 Ответ

0 голосов
/ 27 апреля 2019

Вы не можете поместить их в разные папки, потому что они должны иметь одинаковое имя пакета (основное). Но вы можете поместить их в разные файлы, например так:

file1:

package main

import "fmt"

type greeting_en string

func (g greeting_en) Greet() {
    fmt.Println("Hello Universe")
}


var GreeterEn greeting_en

file2:

package main

import "fmt"

type greeting_chi string


func (g greeting_chi) Greet() {
    fmt.Println("你好宇宙")
}


var GreeterChi greeting_chi

скомпилируйте их так:

go build -buildmode=plugin -o ./langs.go 

И загружать langs вот так:

mod = "./langs.so"
plug, _ := plugin.Open(mod)
EnglishGreeter,_ := plug.Lookup("GreeterEn")
ChineseGreeter,_ := plug.Lookup("GreeterChi")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...