go-micro 动态加载插件源码分析
go-micro 框架支持动态加载插件,无需修改代码。 源码分析 启动服务前,设定 MICRO_PLUGIN 环境变量指定动态库 .so 文件路径,支持多个插件,逗号分割。程序启动前会读取 MICRO_PLUGIN 环境变量,并完成插件设定。 下面是其内部实现: go-micro/service.go func (s *service) Init(opts ...Option) { ... // setup the plugins for _, p := range strings.Split(os.Getenv("MICRO_PLUGIN"), ",") { if len(p) == 0 { continue } // 加载 .so 文件 c, err := plugin.Load(p) if err != nil { logger.Fatal(err) } // go-micro 初始化插件 if err := plugin.Init(c); err != nil { logger.Fatal(err) } } 从上面的代码可以看出,service 初始化化的时候,读取 MICRO_PLUGIN 环境变量中指定的 ....