package config import ( "encoding/binary" "encoding/json" "fmt" "github.com/patrickmn/go-cache" "math/rand" "os" "time" ) var ( Conf *AppConfig WorldLoginCacheCode = cache.New(30*time.Minute, 15*time.Second) ) const ( ColorReset = "\033[0m" ColorRed = "\033[31m" ColorGreen = "\033[32m" ColorYellow = "\033[33m" ColorBlue = "\033[34m" ColorPurple = "\033[35m" ColorCyan = "\033[36m" ColorWhite = "\033[37m" ) type AppConfig struct { AppName string `json:"app_name"` //项目名称 no-name DBname string `json:"db_name"` //数据库名称 test_schema DBserver string `json:"db_server"` //mysql域名 Mode string `json:"mode"` Mysql_UserName string `json:"mysql_username"` //mysql用户名 root Mysql_PWD string `json:"mysql_pwd"` //mysql密码 root MysqlPort string `json:"mysql_port"` //mysql启动端口 Mongo_UserName string `json:"mongo_username"` Mongo_PWD string `json:"mongo_pwd"` Mongo_Host string `json:"mongo_host"` Mongo_Port string `json:"mongo_port"` //华为SMS短信平台url HUAWEI_SMS_Url string `json:"huawei_sms_url"` Port string `json:"port"` //项目启动端口 StaticPath string `json:"static_path"` Timeout10 string `json:"timeout10"` //mysql超时 RedisServer string `json:"redis_server"` //redis域名 RedisPort string `json:"redis_port"` //redis启动端口 RedisPwd string `json:"redis_pwd"` //redis密码 RedisDB string `json:"redis_db"` //redis连接数据库 //短信验证码 SmsAccessKeyId string `json:"sms_access_key_id"` SmsAccessKeySecret string `json:"sms_access_key_secret"` //咪咕JWT的secret JwtSecret string `json:"jwt_secret"` MiGuAuthId string `json:"miGuAuthId"` // 增加 BusinessManagerAssessmentConfigTranslations 字段 BusinessManagerAssessmentConfigTranslations map[string]string `json:"business_manager_assessment_config_translations"` //英文转中文 ReverseTranslations map[string]string // 反向映射,中文转英文,不需要从JSON解码 SoulUrl string `json:"soul_url"` SoulAuth string `json:"soul_auth"` TranscribeUrl string `json:"transcribe_url"` GetTokenUrl string `json:"get_token_url"` AppKey string `json:"app_key"` AppSecret string `json:"app_secret"` MentalClinicUrl string `json:"mental_clinic_url"` CallBackUrl string `json:"call_back_url"` SemanticAnalysisUrl string `json:"semantic_analysis_url"` VoiceSetModelUrl string `json:"voice_set_model_url"` TranslatePropUrl string `json:"translate_prop_url"` Md5Salt string `json:"md5_salt"` ExhibitionModeAppId int64 `json:"exhibition_mode_app_id"` DrawAiUrl string `json:"draw_ai_url"` //提示词 PromptAPIUrl string `json:"prompt_api_url"` //头像绘制 HeadPortraitAPI string `json:"head_portrait_api"` VoiceModelSets map[string]VoiceModel `json:"voice_model_sets"` //微信小程序 WechatUrl string `json:"wechat_url"` WechatAccessTokenUrl string `json:"wechat_access_token_url"` WechatGetPhoneUrl string `json:"wechat_get_phone_url"` WechatAppId string `json:"wechat_app_id"` WechatAppSecret string `json:"wechat_app_secret"` } // 定义 VoiceModel 结构体来存储每个模型的路径 type VoiceModel struct { GPTModelPath string `json:"gpt_model_path"` SoVITSModelPath string `json:"sovits_model_path"` ReferWavPath string `json:"refer_wav_path"` PromptText string `json:"prompt_text"` PromptLanguage string `json:"prompt_language"` CnName string `json:"cn_name"` } // 定义 VoiceModels 结构体储存所有的 VoiceModelSet /* type VoiceModelSets struct { VoiceModel map[string]VoiceModel `json:"voice_model_sets"` } */ // 方法,根据人名获取模型路径 func GetModelPathsByName(name string) (string, string, bool) { if modelSet, exists := Conf.VoiceModelSets[name]; exists { return modelSet.GPTModelPath, modelSet.SoVITSModelPath, true } return "", "", false } func InitConfig() *AppConfig { fmt.Println(" 读取配置文件... ") file, err := os.Open("./config.json") /* var file *os.File var err error if runtime.GOOS == "linux" { file, err = os.Open("./config.json") } else { file, err = os.Open("src/config.json") } */ if err != nil { fmt.Println("Error opening config file:", err) return nil } defer file.Close() decoder := json.NewDecoder(file) conf := AppConfig{} err = decoder.Decode(&conf) if err != nil { fmt.Println("Error decoding config:", err) return nil } // 创建世界配置信息json反向映射字典 reverseTranslations := make(map[string]string) for k, v := range conf.BusinessManagerAssessmentConfigTranslations { reverseTranslations[v] = k } // 将反向映射存储为全局变量,或添加到配置结构中 conf.ReverseTranslations = reverseTranslations // 假设你在AppConfig中添加了这个字段 Conf = &conf return &conf } //全局随机种子 func RandInit() { var b [8]byte _, err := rand.Read(b[:]) if err != nil { rand.Seed(time.Now().UnixNano()) } else { rand.Seed(time.Now().UnixNano() + int64(binary.LittleEndian.Uint64(b[:]))) } } var GlobalRand = func() *rand.Rand { // 创建一个缓冲区来存储生成的随机数 var b [8]byte _, err := rand.Read(b[:]) var seed int64 if err != nil { // 如果随机数生成失败,回退到当前时间作为种子 seed = time.Now().UnixNano() } else { // 如果随机数生成成功,使用它与当前时间的纳秒来创建种子 seed = time.Now().UnixNano() + int64(binary.LittleEndian.Uint64(b[:])) } return rand.New(rand.NewSource(seed)) }()