初始化项目

This commit is contained in:
皮蛋13361098506
2025-01-06 16:01:02 +08:00
commit 1b77f62820
575 changed files with 69193 additions and 0 deletions

View 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
}

View 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
}

View 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
}

View 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的方式来返回方法执行过程中的错误
*/

View 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,
}
}

View 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
}

View 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")
}

View 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
}