Fundamentos del package plugin de Go
Creación de archivos .so y uso de plugin.Open / Lookup
Fundamentos del package plugin de Go es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
¿Qué es el paquete plugin de Go?
El paquete plugin (Go 1.8+) permite cargar bibliotecas compartidas .so compiladas en tiempo de ejecución y llamar a sus funciones y variables exportadas.
Compilar un plugin
Compile un archivo de Go como plugin con -buildmode=plugin:
// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }Cargar un plugin
Cargue el archivo .so y busque los símbolos exportados:
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"))Restricciones de los plugins
Todos los paquetes importados por el plugin y por el host deben tener exactamente las mismas versiones. El plugin debe utilizar package main. Los plugins no se pueden descargar una vez cargados.
Tipos de símbolos
plugin.Lookup devuelve un valor any. Haga una aserción de tipo al tipo de función esperado o al tipo de variable correspondiente. Las incompatibilidades provocan pánicos en tiempo de ejecución.
Limitaciones de la plataforma
El paquete plugin funciona en Linux y macOS, pero no en Windows ni con CGO_ENABLED=0. Tampoco admite la compilación cruzada para destinos de tipo plugin.
Compatibilidad de versiones
El plugin y el host deben compilarse con la misma versión de Go y con las mismas versiones de todos los paquetes compartidos. Una incompatibilidad de versiones impide que el plugin se cargue.
Casos de uso
Los plugins son adecuados para sistemas de gestión de contenido con controladores proporcionados por los usuarios, bases de datos con backends de almacenamiento intercambiables y aplicaciones que necesitan extensiones cargables en tiempo de ejecución sin recompilar el host.
Alternativas
Para obtener más flexibilidad, utilice plugins basados en RPC (HashiCorp go-plugin), módulos de WebAssembly o un lenguaje de scripting (Lua, Starlark) integrado en el host en lugar de plugins nativos.
Depurar plugins
¿No se encuentran los símbolos del plugin? Compruebe que el paquete sea main, que el símbolo esté exportado (con mayúscula inicial), que coincidan las etiquetas de compilación y las versiones de los módulos y que la plataforma sea correcta.
La carga de plugins es unidireccional
Una vez cargado un plugin, no se puede descargar. Diseñe los sistemas para que toleren que todos los plugins cargados permanezcan activos durante toda la vida útil del proceso.
Comprobación rápida
¿Cuál es una limitación importante del paquete plugin de Go en comparación con HashiCorp go-plugin?
Repaso: paquete plugin de Go
Puntos clave:
- Compile con -buildmode=plugin; cargue con plugin.Open
- plugin.Lookup devuelve any; haga una aserción de tipo al tipo esperado
- Solo Linux/macOS; se requieren versiones idénticas; no se pueden descargar
- Prefiera go-plugin (basado en RPC) para obtener flexibilidad multiplataforma
Preguntas frecuentes
¿La lección «Fundamentos del package plugin de Go» es gratis?
Sí — el texto completo de «Fundamentos del package plugin de Go» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Fundamentos del package plugin de Go»?
Creación de archivos .so y uso de plugin.Open / Lookup Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Fundamentos del package plugin de Go»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Fundamentos del package plugin de Go
- Diseño de una interfaz de plugin
- Carga dinámica y símbolos
- Alternativas: HashiCorp go-plugin