0Pricing
Go Academy · Урок

Основы пакета plugin в Go

Создание .so-файлов и использование plugin.Open / Lookup

«Основы пакета plugin в Go» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Что такое пакет плагинов Go?

Пакет plugin (Go 1.8 и новее) позволяет во время выполнения загружать скомпилированные динамические библиотеки .so и вызывать содержащиеся в них экспортируемые функции и переменные.

Создание плагина

Скомпилируйте файл Go как плагин с помощью -buildmode=plugin:

// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }

Загрузка плагина

Загрузите файл .so и найдите экспортируемые символы:

p, err := plugin.Open("./greeter.so")
if err != nil { log.Fatal(err) }

sym, err := p.Lookup("Greet")
if err != nil { log.Fatal(err) }

greet, ok := sym.(func(string) string)
if !ok { log.Fatal("wrong type") }
fmt.Println(greet("World"))

Ограничения плагинов

Все пакеты, импортированные плагином и хостом, должны иметь абсолютно одинаковые версии. В плагине должен использоваться package main. После загрузки плагины нельзя выгрузить.

Типы символов

plugin.Lookup возвращает значение произвольного типа. Приведите его тип к ожидаемой сигнатуре функции или типу переменной. Несовпадения вызывают паники во время выполнения.

Ограничения платформы

Пакет плагинов работает в Linux и macOS, но не в Windows и не при использовании CGO_ENABLED=0. Он также не поддерживает кросс-компиляцию для целей-плагинов.

Совместимость версий

Плагин и хост должны быть скомпилированы одной и той же версией Go и с одинаковыми версиями всех общих пакетов. Несовпадение версий приводит к сбою загрузки плагина.

Варианты использования

Плагины подходят для систем управления содержимым с обработчиками, предоставляемыми пользователями, баз данных со сменными механизмами хранения и приложений, которым нужны расширения, загружаемые во время выполнения без повторной компиляции хоста.

Альтернативы

Для большей гибкости используйте плагины на основе RPC (HashiCorp go-plugin), модули WebAssembly или встроенный в хост язык сценариев (Lua, Starlark) вместо нативных плагинов.

Отладка плагинов

Символы плагина не найдены? Проверьте правильность package main, экспорт символа (с заглавной буквы), совпадение тегов сборки и версий модулей, а также соответствие платформы.

Загрузка плагина необратима

После загрузки плагин нельзя выгрузить. Проектируйте системы так, чтобы они могли работать со всеми загруженными плагинами на протяжении всего времени работы процесса.

Быстрая проверка

Какое ключевое ограничение есть у пакета плагинов Go по сравнению с HashiCorp go-plugin?

Итоги: пакет плагинов Go

Ключевые моменты:

  • Собирайте с помощью -buildmode=plugin; загружайте с помощью plugin.Open
  • plugin.Lookup возвращает значение произвольного типа; приводите его к ожидаемому типу
  • Только Linux/macOS; требуются одинаковые версии; выгрузка невозможна
  • Для кроссплатформенной гибкости предпочтительнее go-plugin (на основе RPC)

Часто задаваемые вопросы

Урок «Основы пакета plugin в Go» бесплатный?

Да — полный текст урока «Основы пакета plugin в Go» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы пакета plugin в Go»?

Создание .so-файлов и использование plugin.Open / Lookup Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы пакета plugin в Go»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы пакета plugin в Go
  2. Проектирование интерфейса плагина
  3. Динамическая загрузка и символы
  4. Альтернативы: HashiCorp go-plugin
← Назад к Go Academy