feat: 合并Gin_Vue

This commit is contained in:
TsMask
2023-10-16 17:10:38 +08:00
parent 5289818fd4
commit 40a32cb67f
203 changed files with 19719 additions and 178 deletions

View File

@@ -0,0 +1,163 @@
package config
import (
"bytes"
"embed"
"fmt"
"log"
"os"
"time"
libConfig "ems.agt/src/lib_features/config"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
//go:embed config/*.yaml
var configFiles embed.FS
// 初始化程序配置
func InitConfig() {
initFlag()
initViper()
}
// 指定参数绑定
func initFlag() {
// --env prod
pflag.String("env", "prod", "Specify Run Environment Configuration local or prod")
// --c /etc/restconf.yaml
// -c /etc/restconf.yaml
pConfig := pflag.StringP("config", "c", "./etc/restconf.yaml", "Specify Configuration File")
// --version
// -V
pVersion := pflag.BoolP("version", "V", false, "Output program version")
// --help
pHelp := pflag.Bool("help", false, "Viewing Help Commands")
pflag.Parse()
// 参数固定输出
if *pVersion {
buildInfo := libConfig.BuildInfo()
fmt.Println(buildInfo)
os.Exit(1)
}
if *pHelp {
pflag.Usage()
os.Exit(1)
}
// 外层lib和features使用的配置
libConfig.ConfigRead(*pConfig)
viper.BindPFlags(pflag.CommandLine)
}
// 配置文件读取
func initViper() {
// 在当前工作目录中寻找配置
// viper.AddConfigPath("config")
// viper.AddConfigPath("src/config")
// 如果配置文件名中没有扩展名则需要设置Type
viper.SetConfigType("yaml")
// 从 embed.FS 中读取默认配置文件内容
configDefault, err := configFiles.ReadFile("config/config.default.yaml")
if err != nil {
log.Fatalf("ReadFile config default file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.ReadConfig(bytes.NewReader(configDefault))
if err != nil {
log.Fatalf("NewReader config default file: %s", err)
return
}
// // 配置文件的名称(无扩展名)
// viper.SetConfigName("config.default")
// // 读取默认配置文件
// if err := viper.ReadInConfig(); err != nil {
// log.Fatalf("fatal error config default file: %s", err)
// }
env := viper.GetString("env")
if env != "local" && env != "prod" {
log.Fatalf("fatal error config env for local or prod : %s", env)
}
log.Printf("Current service environment operation configuration => %s \n", env)
// 加载运行配置文件合并相同配置
if env == "prod" {
// viper.SetConfigName("config.prod")
// 从 embed.FS 中读取默认配置文件内容
configProd, err := configFiles.ReadFile("config/config.prod.yaml")
if err != nil {
log.Fatalf("ReadFile config prod file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.MergeConfig(bytes.NewReader(configProd))
if err != nil {
log.Fatalf("NewReader config prod file: %s", err)
return
}
} else {
// viper.SetConfigName("config.local")
// 从 embed.FS 中读取默认配置文件内容
configLocal, err := configFiles.ReadFile("config/config.local.yaml")
if err != nil {
log.Fatalf("ReadFile config local file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.MergeConfig(bytes.NewReader(configLocal))
if err != nil {
log.Fatalf("NewReader config local file: %s", err)
return
}
}
// if err := viper.MergeInConfig(); err != nil {
// log.Fatalf("fatal error config MergeInConfig: %s", err)
// }
// 合并外层lib和features使用配置
libConfig.ConfigInMerge()
// 记录程序开始运行的时间点
viper.Set("runTime", time.Now())
}
// Env 获取运行服务环境
// local prod
func Env() string {
return viper.GetString("env")
}
// RunTime 程序开始运行的时间
func RunTime() time.Time {
return viper.GetTime("runTime")
}
// Get 获取配置信息
//
// Get("framework.name")
func Get(key string) any {
return viper.Get(key)
}
// IsAdmin 用户是否为管理员
func IsAdmin(userID string) bool {
if userID == "" {
return false
}
// 从本地配置获取user信息
admins := Get("user.adminList").([]any)
for _, s := range admins {
if s.(string) == userID {
return true
}
}
return false
}