@@ -18,34 +18,32 @@ import (
18
18
"github.com/issue9/web/service"
19
19
)
20
20
21
- // 插件中的初始化函数名称,必须为可导出的函数名称
22
- const moduleInstallFuncName = "Init"
21
+ // PluginInstallFuncName 插件中的初始化函数名称
22
+ //
23
+ // NOTE: 必须为可导出的函数名称
24
+ const PluginInstallFuncName = "Init"
23
25
24
26
// ErrInited 当模块被多次初始化时返回此错误
25
27
var ErrInited = errors .New ("模块已经初始化" )
26
28
27
- type (
28
- // InstallFunc 安装模块的函数签名
29
- InstallFunc func (* Server ) error
29
+ // PluginInstallFunc 安装插件的函数签名
30
+ type PluginInstallFunc func (* Server ) error
30
31
31
- // Tag 表示与特定标签相关联的初始化函数列表
32
- //
33
- // 依附于模块,共享模块的依赖关系。
34
- // 一般是各个模块下的安装脚本使用。
35
- Tag interface {
36
- AddInit (string , func () error )
37
- }
32
+ // Module 表示模块信息
33
+ //
34
+ // 模块可以作为代码的一种组织方式。将一组关联的功能合并为一个模块。
35
+ type Module struct {
36
+ depModule * dep.Module
37
+ srv * Server
38
+ filters []Filter
39
+ }
38
40
39
- // Module 表示模块信息
40
- //
41
- // 模块仅作为在初始化时在代码上的一种分类,一旦初始化完成,
42
- // 则不再有模块的概念,修改模块的相关属性,也不会对代码有实质性的改变。
43
- Module struct {
44
- depModule * dep.Module
45
- srv * Server
46
- filters []Filter
47
- }
48
- )
41
+ // Tag 表示与特定标签相关联的初始化函数列表
42
+ //
43
+ // 依附于模块,共享模块的依赖关系。一般是各个模块下的安装脚本使用。
44
+ type Tag interface {
45
+ AddInit (string , func () error )
46
+ }
49
47
50
48
// NewModule 声明一个新的模块
51
49
//
@@ -135,19 +133,26 @@ func (srv *Server) LoadPlugins(glob string) error {
135
133
}
136
134
137
135
// LoadPlugin 将指定的插件当作模块进行加载
136
+ //
137
+ // path 为插件的路径;
138
+ //
139
+ // 插件必须是以 buildmode=plugin 的方式编译的,且要求其引用的 github.com/issue9/web
140
+ // 版本与当前的相同。
141
+ // LoadPlugin 会在插件中查找函数名为 Init 的方法名,同时要求其函数类型为 func(*Server)error,
142
+ // 如果存在,会调用该方法将插件加载到 Server 对象中,否则返回相应的错误信息。
138
143
func (srv * Server ) LoadPlugin (path string ) error {
139
144
p , err := plugin .Open (path )
140
145
if err != nil {
141
146
return err
142
147
}
143
148
144
- symbol , err := p .Lookup (moduleInstallFuncName )
149
+ symbol , err := p .Lookup (PluginInstallFuncName )
145
150
if err != nil {
146
151
return err
147
152
}
148
153
149
154
if install , ok := symbol .(func (* Server ) error ); ok {
150
- return InstallFunc (install )(srv )
155
+ return PluginInstallFunc (install )(srv )
151
156
}
152
157
153
158
return fmt .Errorf ("插件 %s 未找到安装函数" , path )
0 commit comments