From 5f4ac8e53eae450742dd4486dd178b21e46dabfb Mon Sep 17 00:00:00 2001 From: xiaoyutab Date: Wed, 21 Jun 2023 11:45:48 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E7=9A=84=E7=A8=8B=E5=BA=8F=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exec.go | 32 ++++++++++++++++++++++++++++++++ xgo_test.go | 5 +++++ 2 files changed, 37 insertions(+) create mode 100644 exec.go diff --git a/exec.go b/exec.go new file mode 100644 index 0000000..15753a2 --- /dev/null +++ b/exec.go @@ -0,0 +1,32 @@ +package xgotool + +import ( + "io" + "os/exec" +) + +// Exec 执行Shell命令并等待结果输出【避免僵尸进程】 +// +// 如果要使用管道进行输出,则需要使用bash进行嵌套,如: +// +// xgotool.Exec("bash", "-c", "ps aux | grep go") +func Exec(name string, arg ...string) (string, error) { + cmd := exec.Command(name, arg...) + //获取输出对象,可以从该对象中读取输出结果 + stdout, err := cmd.StdoutPipe() + if err != nil { + return "", err + } + // 保证关闭输出流 + defer stdout.Close() + // 运行命令 + if err := cmd.Start(); err != nil { + return "", err + } + defer cmd.Wait() + opBytes, err := io.ReadAll(stdout) + if err != nil { + return "", err + } + return string(opBytes), nil +} diff --git a/xgo_test.go b/xgo_test.go index 9f5bd94..c917257 100644 --- a/xgo_test.go +++ b/xgo_test.go @@ -6,6 +6,11 @@ import ( "gitee.com/xiaoyutab/xgotool" ) +// 获取命令输出 +func TestExec(t *testing.T) { + t.Log(xgotool.Exec("bash", "-c", "ps aux | grep go")) +} + // emoji表情编解码 func TestEmoji(t *testing.T) { emoji := "🤵🤵🏾" -- Gitee From a26fdd960f5e4b05090308f4e97c80a61372018a Mon Sep 17 00:00:00 2001 From: xiaoyutab Date: Wed, 21 Jun 2023 16:49:33 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E8=AF=BB=E5=86=99=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 13 ++++++- xgodb/config.go | 1 + xgodb/init.go | 2 ++ xgodb/readme.md | 6 ++++ xgodb/xgodb_test.go | 1 + xgodb/xgodbconfig/config_default.go | 21 +++++++++++ xgodb/xgodbconfig/getconfig.go | 49 ++++++++++++++++++++++++++ xgodb/xgodbconfig/init.go | 50 +++++++++++++++++++++++++++ xgodb/xgodbconfig/xgodbconfig_test.go | 16 +++++++++ 9 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 xgodb/config.go create mode 100644 xgodb/init.go create mode 100644 xgodb/readme.md create mode 100644 xgodb/xgodb_test.go create mode 100644 xgodb/xgodbconfig/config_default.go create mode 100644 xgodb/xgodbconfig/getconfig.go create mode 100644 xgodb/xgodbconfig/init.go create mode 100644 xgodb/xgodbconfig/xgodbconfig_test.go diff --git a/go.mod b/go.mod index ee093fa..caab454 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,15 @@ module gitee.com/xiaoyutab/xgotool go 1.20 -require github.com/mssola/user_agent v0.6.0 +require ( + github.com/garyburd/redigo v1.6.4 + github.com/mssola/user_agent v0.6.0 + gorm.io/driver/mysql v1.5.1 + gorm.io/gorm v1.25.1 +) + +require ( + github.com/go-sql-driver/mysql v1.7.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect +) diff --git a/xgodb/config.go b/xgodb/config.go new file mode 100644 index 0000000..c54fcf6 --- /dev/null +++ b/xgodb/config.go @@ -0,0 +1 @@ +package xgodb diff --git a/xgodb/init.go b/xgodb/init.go new file mode 100644 index 0000000..425cd67 --- /dev/null +++ b/xgodb/init.go @@ -0,0 +1,2 @@ +// 数据库操作相关服务 +package xgodb diff --git a/xgodb/readme.md b/xgodb/readme.md new file mode 100644 index 0000000..3708e8c --- /dev/null +++ b/xgodb/readme.md @@ -0,0 +1,6 @@ +# xgodb模块说明 + +此模块为操作数据库的相关模块,依赖 `gorm` ,使用 `MySQL` 作为存储数据库 + +## 数据库说明 + diff --git a/xgodb/xgodb_test.go b/xgodb/xgodb_test.go new file mode 100644 index 0000000..ffc84c9 --- /dev/null +++ b/xgodb/xgodb_test.go @@ -0,0 +1 @@ +package xgodb_test diff --git a/xgodb/xgodbconfig/config_default.go b/xgodb/xgodbconfig/config_default.go new file mode 100644 index 0000000..6fa117c --- /dev/null +++ b/xgodb/xgodbconfig/config_default.go @@ -0,0 +1,21 @@ +package xgodbconfig + +// 获取数据库中的所有配置项 +// 该函数将所有配置项读入_cache_config内存项中 +func config_default() { + // 读取数据库中的所有配置 + if DefaultConfig.DB != nil { + mod := []Configure{} + err := DefaultConfig.DB.Table(DefaultConfig.ConfigTable).Find(&mod).Error + if err == nil && len(mod) > 0 { + _cache_config_look.Lock() + if _cache_config == nil { + _cache_config = map[string]Configure{} + } + for i := 0; i < len(mod); i++ { + _cache_config[mod[i].NameKey] = mod[i] + } + _cache_config_look.Unlock() + } + } +} diff --git a/xgodb/xgodbconfig/getconfig.go b/xgodb/xgodbconfig/getconfig.go new file mode 100644 index 0000000..5987b17 --- /dev/null +++ b/xgodb/xgodbconfig/getconfig.go @@ -0,0 +1,49 @@ +package xgodbconfig + +// 获取配置项的详情值 +// +// name 要获取的配置项的配置下标 +func Getconfigure(name string) Configure { + if _cache_config == nil { + config_default() + } + if v, ok := _cache_config[name]; ok { + return v + } + return Configure{} +} + +// 读取配置项的值 +// +// name 要获取的配置项的配置下标 +func GetInt(name string) int64 { + return Getconfigure(name).ValueInt +} + +// 获取string值的配置 +// +// name 要获取的配置项的配置下标 +func GetString(name string) string { + return Getconfigure(name).ValueString +} + +// 获取开关值 +// +// name 要获取的配置项的配置下标 +func GetBool(name string) bool { + return Getconfigure(name).ValueBool == 1 +} + +// 获取浮点数值 +// +// name 要获取的配置项的配置下标 +func GetFloat(name string) float64 { + return Getconfigure(name).ValueFloat +} + +// 获取select下拉列表 +// +// name 要获取的配置项的配置下标 +func GetSelect(name string) string { + return GetString(name) +} diff --git a/xgodb/xgodbconfig/init.go b/xgodb/xgodbconfig/init.go new file mode 100644 index 0000000..7f94555 --- /dev/null +++ b/xgodb/xgodbconfig/init.go @@ -0,0 +1,50 @@ +// 数据库配置的读写支持 +package xgodbconfig + +import ( + "sync" + + "github.com/garyburd/redigo/redis" + "gorm.io/gorm" +) + +// 数据库相关配置 +type Config struct { + DB *gorm.DB + Redis redis.Conn // redis缓存配置 + ConfigTable string // 配置表名称 + ConfigGroupTable string // 配置表分组名称 + ConfigUserTable string // 用户配置存储表 +} + +// 默认配置表所在的配置 +var DefaultConfig Config = Config{ + ConfigTable: "configure", + ConfigUserTable: "configure_user", +} + +var _cache_config map[string]Configure +var _cache_config_look sync.Mutex + +// 配置项信息存储表 +type Configure struct { + Id uint `gorm:"column:id" json:"id" form:"id"` + NameKey string `gorm:"column:name_key" json:"name_key" form:"name_key"` //配置项key + NameCn string `gorm:"column:name_cn" json:"name_cn" form:"name_cn"` //配置项名称 + NameGroup string `gorm:"column:name_group" json:"name_group" form:"name_group"` //配置项组 + Types string `gorm:"column:types" json:"types" form:"types"` //配置项类型 + Desc string `gorm:"column:desc" json:"desc" form:"desc"` //配置项介绍信息 + ValueBool uint8 `gorm:"column:value_bool" json:"value_bool" form:"value_bool"` + ValueString string `gorm:"column:value_string" json:"value_string" form:"value_string"` + ValueInt int64 `gorm:"column:value_int" json:"value_int" form:"value_int"` + ValueFloat float64 `gorm:"column:value_float" json:"value_float" form:"value_float"` + EnumSelect string `gorm:"column:enum_select" json:"enum_select" form:"enum_select"` //下拉列表,多项使用,分割key和key_cn使用:分割,下拉选择的值存储在value_string中 + CreatedAt string `gorm:"column:created_at" json:"created_at" form:"created_at"` //创建时间 + UpdatedAt string `gorm:"column:updated_at" json:"updated_at" form:"updated_at"` //更新时间 +} + +// 用户个性化配置项存储表 +type ConfigureUser struct { + Id uint `gorm:"column:id" json:"id" form:"id"` //用户ID + Configure string `gorm:"column:configure" json:"configure" form:"configure"` //配置信息JSON串 +} diff --git a/xgodb/xgodbconfig/xgodbconfig_test.go b/xgodb/xgodbconfig/xgodbconfig_test.go new file mode 100644 index 0000000..9260069 --- /dev/null +++ b/xgodb/xgodbconfig/xgodbconfig_test.go @@ -0,0 +1,16 @@ +package xgodbconfig_test + +import ( + "testing" + + "gitee.com/xiaoyutab/xgotool/xgodb/xgodbconfig" + "gorm.io/driver/mysql" + "gorm.io/gorm" +) + +func TestConfig(t *testing.T) { + db, _ := gorm.Open(mysql.Open("admin:admin@tcp(localhost:3306)/self_xiaoyutab?charset=utf8"), &gorm.Config{}) + xgodbconfig.DefaultConfig.DB = db // 注册数据库 + // 获取配置项 + t.Log(xgodbconfig.GetBool("FILE_UPLOAD_IMAGE_STATUS")) +} -- Gitee From ee7ac91f64d7847eb13cbb2e025c216a7a1fce82 Mon Sep 17 00:00:00 2001 From: xiaoyutab Date: Wed, 21 Jun 2023 16:50:33 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xgodb/xgodbconfig/config_default.go | 1 + 1 file changed, 1 insertion(+) diff --git a/xgodb/xgodbconfig/config_default.go b/xgodb/xgodbconfig/config_default.go index 6fa117c..08e1878 100644 --- a/xgodb/xgodbconfig/config_default.go +++ b/xgodb/xgodbconfig/config_default.go @@ -2,6 +2,7 @@ package xgodbconfig // 获取数据库中的所有配置项 // 该函数将所有配置项读入_cache_config内存项中 +// 【重新从数据库中获取配置项并存储到本地缓存中】 func config_default() { // 读取数据库中的所有配置 if DefaultConfig.DB != nil { -- Gitee From 692a81013301d2123e9d85a289476ab065de0b9e Mon Sep 17 00:00:00 2001 From: xiaoyutab Date: Wed, 21 Jun 2023 17:01:26 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E6=B3=A8=E5=86=8C=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xgodb/config.go | 27 +++++++++++++++++++++++++++ xgodb/init.go | 25 +++++++++++++++++++++++++ xgodb/xgodb_test.go | 17 +++++++++++++++++ xgodb/xgodbconfig/init.go | 9 +++------ 4 files changed, 72 insertions(+), 6 deletions(-) diff --git a/xgodb/config.go b/xgodb/config.go index c54fcf6..6c804d7 100644 --- a/xgodb/config.go +++ b/xgodb/config.go @@ -1 +1,28 @@ package xgodb + +import "gitee.com/xiaoyutab/xgotool/xgodb/xgodbconfig" + +// 读取配置项的值 +func GetInt(name string) int64 { + return xgodbconfig.Getconfigure(name).ValueInt +} + +// 获取string值的配置 +func GetString(name string) string { + return xgodbconfig.Getconfigure(name).ValueString +} + +// 获取开关值 +func GetBool(name string) bool { + return xgodbconfig.Getconfigure(name).ValueBool == 1 +} + +// 获取浮点数值 +func GetFloat(name string) float64 { + return xgodbconfig.Getconfigure(name).ValueFloat +} + +// 获取select下拉列表 +func GetSelect(name string) string { + return xgodbconfig.GetSelect(name) +} diff --git a/xgodb/init.go b/xgodb/init.go index 425cd67..e9fd318 100644 --- a/xgodb/init.go +++ b/xgodb/init.go @@ -1,2 +1,27 @@ // 数据库操作相关服务 package xgodb + +import ( + "gitee.com/xiaoyutab/xgotool/xgodb/xgodbconfig" + "gorm.io/gorm" +) + +// 数据库相关配置 +type Config struct { + DB *gorm.DB + ConfigTable string // 配置表名称 + ConfigUserTable string // 用户配置存储表 +} + +// 配置信息注册 +func Regedit(c Config) { + xgodbconfig.DefaultConfig.DB = c.DB + xgodbconfig.DefaultConfig.ConfigUserTable = "configure_user" + if c.ConfigUserTable != "" { + xgodbconfig.DefaultConfig.ConfigUserTable = c.ConfigUserTable + } + xgodbconfig.DefaultConfig.ConfigTable = "configure" + if c.ConfigTable != "" { + xgodbconfig.DefaultConfig.ConfigTable = c.ConfigTable + } +} diff --git a/xgodb/xgodb_test.go b/xgodb/xgodb_test.go index ffc84c9..9bdfc19 100644 --- a/xgodb/xgodb_test.go +++ b/xgodb/xgodb_test.go @@ -1 +1,18 @@ package xgodb_test + +import ( + "testing" + + "gitee.com/xiaoyutab/xgotool/xgodb" + "gorm.io/driver/mysql" + "gorm.io/gorm" +) + +func TestGetInt(t *testing.T) { + db, _ := gorm.Open(mysql.Open("admin:admin@tcp(localhost:3306)/self_xiaoyutab?charset=utf8"), &gorm.Config{}) + xgodb.Regedit(xgodb.Config{ + DB: db, + }) + // 获取配置项 + t.Log(xgodb.GetBool("FILE_UPLOAD_IMAGE_STATUS")) +} diff --git a/xgodb/xgodbconfig/init.go b/xgodb/xgodbconfig/init.go index 7f94555..4a26525 100644 --- a/xgodb/xgodbconfig/init.go +++ b/xgodb/xgodbconfig/init.go @@ -4,17 +4,14 @@ package xgodbconfig import ( "sync" - "github.com/garyburd/redigo/redis" "gorm.io/gorm" ) // 数据库相关配置 type Config struct { - DB *gorm.DB - Redis redis.Conn // redis缓存配置 - ConfigTable string // 配置表名称 - ConfigGroupTable string // 配置表分组名称 - ConfigUserTable string // 用户配置存储表 + DB *gorm.DB + ConfigTable string // 配置表名称 + ConfigUserTable string // 用户配置存储表 } // 默认配置表所在的配置 -- Gitee