Создать плагин из нескольких файлов из разных каталогов
После этого урока и репозитория 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")