初始化项目
This commit is contained in:
67
trunk/framework/startMgr/applyMgr/apply.go
Normal file
67
trunk/framework/startMgr/applyMgr/apply.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package applyMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
. "Framework/startMgr"
|
||||
)
|
||||
|
||||
var (
|
||||
funcMap = make(map[string]*FuncItem)
|
||||
mutex sync.Mutex
|
||||
)
|
||||
|
||||
// 注册方法(如果名称重复会panic)
|
||||
// name:方法名称(唯一标识)
|
||||
// moduleType:模块类型
|
||||
// definition:方法定义
|
||||
func Register(name string, moduleType ModuleType, definition func() error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if _, exists := funcMap[name]; exists {
|
||||
panic(fmt.Sprintf("%s已经存在,请重新命名", name))
|
||||
}
|
||||
|
||||
funcMap[name] = NewFuncItem(name, moduleType, definition)
|
||||
}
|
||||
|
||||
// 调用所有方法
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAll() (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, item := range funcMap {
|
||||
// 调用方法
|
||||
if err := item.Call(); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 按照模块类型进行调用
|
||||
// moduleType:模块类型
|
||||
// 返回值:
|
||||
// errList:错误列表
|
||||
func CallType(moduleType ModuleType) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, item := range funcMap {
|
||||
if item.ModuleType != moduleType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
if err := item.Call(); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
80
trunk/framework/startMgr/checkMgr/check.go
Normal file
80
trunk/framework/startMgr/checkMgr/check.go
Normal file
@@ -0,0 +1,80 @@
|
||||
package checkMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
. "Framework/startMgr"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
var (
|
||||
funcMap = make(map[string]*FuncItem)
|
||||
mutex sync.Mutex
|
||||
operateName = "Check"
|
||||
)
|
||||
|
||||
// 注册方法(如果名称重复会panic)
|
||||
// name:方法名称(唯一标识)
|
||||
// moduleType:模块类型
|
||||
// definition:方法定义
|
||||
func Register(name string, moduleType ModuleType, definition func() error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if _, exists := funcMap[name]; exists {
|
||||
panic(fmt.Sprintf("%s已经存在,请重新命名", name))
|
||||
}
|
||||
|
||||
funcMap[name] = NewFuncItem(name, moduleType, definition)
|
||||
}
|
||||
|
||||
// 调用所有方法
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAll() (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog("%s 执行总时间:%s", operateName, time.Since(startTime))
|
||||
}()
|
||||
|
||||
for _, item := range funcMap {
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 按照模块类型进行调用
|
||||
// moduleType:模块类型
|
||||
// 返回值:
|
||||
// errList:错误列表
|
||||
func CallType(moduleType ModuleType) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog("%v %s 执行总时间:%s", moduleType, operateName, time.Since(startTime))
|
||||
}()
|
||||
|
||||
for _, item := range funcMap {
|
||||
if item.ModuleType != moduleType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
75
trunk/framework/startMgr/convertMgr/convert.go
Normal file
75
trunk/framework/startMgr/convertMgr/convert.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package convertMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
. "Framework/startMgr"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
var (
|
||||
funcMap = make(map[string]*FuncItem)
|
||||
mutex sync.Mutex
|
||||
operateName = "Convert"
|
||||
)
|
||||
|
||||
// 注册方法(如果名称重复会panic)
|
||||
// name:方法名称(唯一标识)
|
||||
// moduleType:模块类型
|
||||
// definition:方法定义
|
||||
func Register(name string, moduleType ModuleType, definition func() error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if _, exists := funcMap[name]; exists {
|
||||
panic(fmt.Sprintf("%s已经存在,请重新命名", name))
|
||||
}
|
||||
|
||||
funcMap[name] = NewFuncItem(name, moduleType, definition)
|
||||
}
|
||||
|
||||
// 调用所有方法
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAll() (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, item := range funcMap {
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 按照模块类型进行调用
|
||||
// moduleType:模块类型
|
||||
// 返回值:
|
||||
// errList:错误列表
|
||||
func CallType(moduleType ModuleType) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog("%v %s 执行总时间:%s", moduleType, operateName, time.Since(startTime))
|
||||
}()
|
||||
|
||||
for _, item := range funcMap {
|
||||
if item.ModuleType != moduleType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
44
trunk/framework/startMgr/doc.go
Normal file
44
trunk/framework/startMgr/doc.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package startMgr
|
||||
|
||||
/*
|
||||
startMgr是用于管理应用程序启动的一个模块。
|
||||
应用程序启动,对配置的处理大体可以包含如下三个过程:
|
||||
1、配置初始化:即将配置从配置文件、数据库中读取到内存中
|
||||
2、配置检验:即验证配置是否是合法、有效的
|
||||
3、配置转换:即将以A形式存在的配置转换为以B形式存在;如将以,分隔的字符串转换为[]int
|
||||
4、配置打印:将配置进行打印
|
||||
5、配置赋值:将初始化的临时的数据赋值给正式的数据
|
||||
|
||||
三个过程分别对应五个子包:
|
||||
1、配置初始化:initMgr
|
||||
说明:根据名称来注册方法,可以根据名称来调用方法,以实现方法的提前调用。
|
||||
也可以无序地调用所有的方法
|
||||
|
||||
错误处理方式:
|
||||
以panic的方式来对外暴露名称重复,名称不存在的错误
|
||||
以error的方式来返回方法执行过程中的错误
|
||||
|
||||
2、配置检验:checkMgr
|
||||
说明:以无序地调用所有的方法
|
||||
错误处理方式:
|
||||
以panic的方式来对外暴露名称重复,名称不存在的错误
|
||||
以error的方式来返回方法执行过程中的错误
|
||||
|
||||
3、配置转换:convertMgr
|
||||
说明:以无序地调用所有的方法
|
||||
错误处理方式:
|
||||
以panic的方式来对外暴露名称重复,名称不存在的错误
|
||||
以error的方式来返回方法执行过程中的错误
|
||||
|
||||
4、配置打印:printMgr
|
||||
说明:以无序地调用所有的方法
|
||||
错误处理方式:
|
||||
以panic的方式来对外暴露名称重复,名称不存在的错误
|
||||
以error的方式来返回方法执行过程中的错误
|
||||
|
||||
5、配置赋值:applyMgr
|
||||
说明:以无序地调用所有的方法
|
||||
错误处理方式:
|
||||
以panic的方式来对外暴露名称重复,名称不存在的错误
|
||||
以error的方式来返回方法执行过程中的错误
|
||||
*/
|
||||
62
trunk/framework/startMgr/funcItem.go
Normal file
62
trunk/framework/startMgr/funcItem.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package startMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"goutil/logUtil"
|
||||
"goutil/runtimeUtil"
|
||||
)
|
||||
|
||||
// 模块类型
|
||||
// 具体有哪些模块类型需要对应的程序自己定义
|
||||
type ModuleType int
|
||||
|
||||
// 方法项定义
|
||||
type FuncItem struct {
|
||||
// 方法名称
|
||||
Name string
|
||||
|
||||
// 模块类型
|
||||
ModuleType ModuleType
|
||||
|
||||
// 方法定义
|
||||
Definition func() error
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
// 返回值:
|
||||
// 错误对象
|
||||
func (this *FuncItem) Call() error {
|
||||
err := this.Definition()
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
// operateName:操作名称
|
||||
// 返回值:
|
||||
// 错误对象
|
||||
func (this *FuncItem) Call2(operateName string) error {
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog(fmt.Sprintf("%s %s 执行耗时:%v 执行后内存总占用:%vMB", this.Name, operateName, time.Since(startTime).String(), runtimeUtil.GetMemSize()/1024.0/1024.0))
|
||||
}()
|
||||
|
||||
logUtil.InfoLog(fmt.Sprintf("%v %s 开始执行", this.Name, operateName))
|
||||
err := this.Definition()
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// 新建函数项
|
||||
// name:模块名
|
||||
// moduleType:对应的模块类型
|
||||
// definition:目标处理函数
|
||||
func NewFuncItem(name string, moduleType ModuleType, definition func() error) *FuncItem {
|
||||
return &FuncItem{
|
||||
Name: name,
|
||||
ModuleType: moduleType,
|
||||
Definition: definition,
|
||||
}
|
||||
}
|
||||
121
trunk/framework/startMgr/initMgr/init.go
Normal file
121
trunk/framework/startMgr/initMgr/init.go
Normal file
@@ -0,0 +1,121 @@
|
||||
package initMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
. "Framework/startMgr"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
var (
|
||||
funcMap = make(map[string]*FuncItem)
|
||||
mutex sync.Mutex
|
||||
operateName = "Init"
|
||||
)
|
||||
|
||||
// 注册方法(如果名称重复会panic)
|
||||
// name:方法名称(唯一标识)
|
||||
// moduleType:模块类型
|
||||
// definition:方法定义
|
||||
func Register(name string, moduleType ModuleType, definition func() error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if _, exists := funcMap[name]; exists {
|
||||
panic(fmt.Sprintf("%s已经存在,请重新命名", name))
|
||||
}
|
||||
|
||||
funcMap[name] = NewFuncItem(name, moduleType, definition)
|
||||
}
|
||||
|
||||
// 调用一个方法
|
||||
// name:方法名称(唯一标识)
|
||||
// 返回值:
|
||||
// 错误对象
|
||||
func CallOne(name string) (err error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if item, exists := funcMap[name]; !exists {
|
||||
panic(fmt.Sprintf("%s不存在", name))
|
||||
} else {
|
||||
// 调用方法
|
||||
err = item.Call2(operateName)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 调用任意数量的方法
|
||||
// nameList:任意数量的方法名称
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAny(nameList ...string) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, name := range nameList {
|
||||
if item, exists := funcMap[name]; !exists {
|
||||
panic(fmt.Sprintf("%s不存在", name))
|
||||
} else {
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 调用所有方法
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAll() (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog(fmt.Sprintf("%s 执行总时间:%s", operateName, time.Since(startTime)))
|
||||
}()
|
||||
|
||||
for _, item := range funcMap {
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 按照模块类型进行调用
|
||||
// moduleType:模块类型
|
||||
// 返回值:
|
||||
// errList:错误列表
|
||||
func CallType(moduleType ModuleType) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
startTime := time.Now()
|
||||
defer func() {
|
||||
logUtil.InfoLog(fmt.Sprintf("%v %s 执行总时间:%s", moduleType, operateName, time.Since(startTime)))
|
||||
}()
|
||||
|
||||
for _, item := range funcMap {
|
||||
|
||||
if item.ModuleType != moduleType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
if err := item.Call2(operateName); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
54
trunk/framework/startMgr/initMgr/init_test.go
Normal file
54
trunk/framework/startMgr/initMgr/init_test.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package initMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRegister(t *testing.T) {
|
||||
Register("first", 1, first)
|
||||
Register("second", 2, second)
|
||||
Register("third", 3, third)
|
||||
Register("fourth", 4, fourth)
|
||||
}
|
||||
|
||||
func TestCallOne(t *testing.T) {
|
||||
name := "first"
|
||||
if err := CallOne(name); err != nil {
|
||||
t.Errorf("there should be no error, but now it has:%s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCallAny(t *testing.T) {
|
||||
errList := CallAny("second", "third")
|
||||
if len(errList) != 1 {
|
||||
t.Errorf("there should be 1 error, but now:%d", len(errList))
|
||||
}
|
||||
}
|
||||
|
||||
func TestCallAll(t *testing.T) {
|
||||
errList := CallAll()
|
||||
if len(errList) != 2 {
|
||||
t.Errorf("there should be 1 error, but now:%d", len(errList))
|
||||
}
|
||||
}
|
||||
|
||||
func first() error {
|
||||
fmt.Println("first")
|
||||
return nil
|
||||
}
|
||||
|
||||
func second() error {
|
||||
fmt.Println("second")
|
||||
return fmt.Errorf("the second error")
|
||||
}
|
||||
|
||||
func third() error {
|
||||
fmt.Println("third")
|
||||
return nil
|
||||
}
|
||||
|
||||
func fourth() error {
|
||||
fmt.Println("fourth")
|
||||
return fmt.Errorf("the fourth error")
|
||||
}
|
||||
67
trunk/framework/startMgr/printMgr/print.go
Normal file
67
trunk/framework/startMgr/printMgr/print.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package printMgr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
. "Framework/startMgr"
|
||||
)
|
||||
|
||||
var (
|
||||
funcMap = make(map[string]*FuncItem)
|
||||
mutex sync.Mutex
|
||||
)
|
||||
|
||||
// 注册方法(如果名称重复会panic)
|
||||
// name:方法名称(唯一标识)
|
||||
// moduleType:模块类型
|
||||
// definition:方法定义
|
||||
func Register(name string, moduleType ModuleType, definition func() error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
if _, exists := funcMap[name]; exists {
|
||||
panic(fmt.Sprintf("%s已经存在,请重新命名", name))
|
||||
}
|
||||
|
||||
funcMap[name] = NewFuncItem(name, moduleType, definition)
|
||||
}
|
||||
|
||||
// 调用所有方法
|
||||
// 返回值:
|
||||
// 错误列表
|
||||
func CallAll() (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, item := range funcMap {
|
||||
// 调用方法
|
||||
if err := item.Call(); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 按照模块类型进行调用
|
||||
// moduleType:模块类型
|
||||
// 返回值:
|
||||
// errList:错误列表
|
||||
func CallType(moduleType ModuleType) (errList []error) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
|
||||
for _, item := range funcMap {
|
||||
if item.ModuleType != moduleType {
|
||||
continue
|
||||
}
|
||||
|
||||
// 调用方法
|
||||
if err := item.Call(); err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user