dynamic go load runtime package

dynamic - Cargue el paquete dinĂ¡micamente en golang



load runtime (5)

¿Es posible cargar un paquete específico durante el tiempo de ejecución? Quiero tener un tipo de complementos donde cada uno tenga las mismas funciones que los otros pero con un comportamiento diferente, y dependiendo del archivo de configuración, cargue uno u otro. Gracias.


Creo que lo que estás buscando es la función especial init

si agrega un

func init() { }

dentro de un paquete, se ejecutará la primera vez que se importe el paquete. Esto sucede solo en el mismo binario. Como otros ya han dicho, go no admite bibliotecas cargadas dinámicamente.


Hay soporte para esto ahora a partir de 1.8

plugins


No, Go no admite bibliotecas cargadas dinámicamente.

Su mejor opción es iniciar el complemento como su propio ejecutable y comunicarse con él a través de sockets o vía stdin / stdout.

Actualización 2017

Esta respuesta ya no es cierta, Go ahora admite plugins .


Solo haga esto, cree un codegen que lea la configuración, genere un archivo básico con los paquetes cargados en orden y luego ejecútelo, los lenguajes de compilación no proporcionarán carga dinámica, incluso dart sufre de alguna manera, simplemente lea su configuración archivo y luego crear un archivo temporal con los códigos necesarios para cargar y comunicarse con sockets o http


Puede considerar ejecutar los paquetes ''plugin'' en tiempo de ejecución, escribiendo un nuevo programa (por ejemplo, en un directorio temporal) y ejecutándolo a través de exec.Command , algo exec.Command("go", "run", files…).Run()

Verás un código similar here .