Создать плагин из нескольких файлов из разных каталогов

После этого урока и репозитория github я понял, как использовать плагины.

Учебник компилирует каждый файл отдельно в файлы 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 / test / chi /

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

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

1 ответ

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

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")
Другие вопросы по тегам