package cmpSnipper import ( "errors" "plugin" ) type cmpPluginStruct struct { Name string Plug *plugin.Plugin } type App struct { Conf interface{} ErrIsDir error // = errors.New("Is directory") CliList []cmpWbsCliStruct cmpSnipperHttpServ cmpSnipperHttpServ Rand4d int PlugList []cmpPluginStruct SshList []cmpSshCliStruct } func (app *App) PlugInit(name string, file string) { qqq := map[string]interface{}{ "Aaa": "Bbb", } var plug cmpPluginStruct var p *plugin.Plugin p, err := plugin.Open(file) if err != nil { app.Log(err) return } plug.Name = name plug.Plug = p plugInitReq, err := plug.Plug.Lookup("CmpPlug1Init") if err != nil { app.Log(err) return } plugInitFnc := plugInitReq.(func(int, func(any, ...interface{}), map[string]interface{}) interface{}) plugInitRes := plugInitFnc(33, app.Log, qqq) app.Log("%+v", plugInitRes) app.PlugList = append(app.PlugList, plug) } func (app *App) PlugCall(pnam string, fnam string) { for _, plug := range app.PlugList { if plug.Name != pnam { continue } plugFuncReq, err := plug.Plug.Lookup(fnam) if err != nil { app.Log(err) return } plugFuncFnc := plugFuncReq.(func() error) plugFuncRes := plugFuncFnc() app.Log("%+v", plugFuncRes) } } func (app *App) Prep() (error) { app.ErrIsDir = errors.New("Is directory") app.LogSetup() var err = app.ConfLoadFile("secret/zest.json"); if err != nil { return err } return nil } func (app *App) Proc() error { var err error // = make(chan error, 1) var term = make(chan bool, 1) go app.WaitSignal(term) err = app.HttpServStart() if err != nil { return err } <-term app.HttpServStop() app.Log("Terminating") return nil } // end