Skip to content

Commit a244060

Browse files
committed
refactor: 公开与插件相关的数据
1 parent af64171 commit a244060

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

module.go

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,32 @@ import (
1818
"github.com/issue9/web/service"
1919
)
2020

21-
// 插件中的初始化函数名称,必须为可导出的函数名称
22-
const moduleInstallFuncName = "Init"
21+
// PluginInstallFuncName 插件中的初始化函数名称
22+
//
23+
// NOTE: 必须为可导出的函数名称
24+
const PluginInstallFuncName = "Init"
2325

2426
// ErrInited 当模块被多次初始化时返回此错误
2527
var ErrInited = errors.New("模块已经初始化")
2628

27-
type (
28-
// InstallFunc 安装模块的函数签名
29-
InstallFunc func(*Server) error
29+
// PluginInstallFunc 安装插件的函数签名
30+
type PluginInstallFunc func(*Server) error
3031

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+
}
3840

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+
}
4947

5048
// NewModule 声明一个新的模块
5149
//
@@ -135,19 +133,26 @@ func (srv *Server) LoadPlugins(glob string) error {
135133
}
136134

137135
// LoadPlugin 将指定的插件当作模块进行加载
136+
//
137+
// path 为插件的路径;
138+
//
139+
// 插件必须是以 buildmode=plugin 的方式编译的,且要求其引用的 github.com/issue9/web
140+
// 版本与当前的相同。
141+
// LoadPlugin 会在插件中查找函数名为 Init 的方法名,同时要求其函数类型为 func(*Server)error,
142+
// 如果存在,会调用该方法将插件加载到 Server 对象中,否则返回相应的错误信息。
138143
func (srv *Server) LoadPlugin(path string) error {
139144
p, err := plugin.Open(path)
140145
if err != nil {
141146
return err
142147
}
143148

144-
symbol, err := p.Lookup(moduleInstallFuncName)
149+
symbol, err := p.Lookup(PluginInstallFuncName)
145150
if err != nil {
146151
return err
147152
}
148153

149154
if install, ok := symbol.(func(*Server) error); ok {
150-
return InstallFunc(install)(srv)
155+
return PluginInstallFunc(install)(srv)
151156
}
152157

153158
return fmt.Errorf("插件 %s 未找到安装函数", path)

module_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func job(time.Time) error {
2323
func TestModuleInitFuncName(t *testing.T) {
2424
a := assert.New(t)
2525

26-
a.True(unicode.IsUpper(rune(moduleInstallFuncName[0])))
26+
a.True(unicode.IsUpper(rune(PluginInstallFuncName[0])))
2727
}
2828

2929
func TestModule_NewTag(t *testing.T) {

web.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ package web
66
import "github.com/issue9/web/internal/version"
77

88
// Version 当前框架的版本
9-
const Version = version.Version
9+
func Version() string {
10+
return version.Version
11+
}

0 commit comments

Comments
 (0)