From 8a82db34223b2e3eb392d14886fde6d7e30e65a7 Mon Sep 17 00:00:00 2001 From: Mmx <1624045573@qq.com> Date: Tue, 11 May 2021 12:43:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=BC=BA=E5=A4=B1Config=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=9B=9E=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modles/config.go | 34 ++++++++++++++++++++++++++++++++++ Modles/util/reflect.go | 19 +++++++++++++++++++ Util/init.go | 24 +++++++----------------- 3 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 Modles/util/reflect.go diff --git a/Modles/config.go b/Modles/config.go index 1990e13..545e1ff 100644 --- a/Modles/config.go +++ b/Modles/config.go @@ -1,5 +1,10 @@ package Modles +import ( + "Mmx/Modles/util" + "reflect" +) + type Settings struct { QuitIfNetOk bool `json:"quit_if_net_ok"` DemoMode bool `json:"demo_mode"` @@ -25,3 +30,32 @@ func (a *Config) Generate() *LoginInfo { }, } } + +func (a *Config) FillDefault() *Config { + var m = map[interface{}]map[string]interface{}{ + &a.From: { + "Domain": "www.msftconnecttest.com", + }, + &a.Meta: { + "N": "200", + "VType": "1", + "Acid": "5", + "Enc": "srun_bx1", + }, + &a.Settings: { + "Dns": "1.2.4.8", + }, + } + + for q, w := range m { + t := reflect.ValueOf(q).Elem() + for k, v := range w { + tt := t.FieldByName(k) + if util.Reflect.IsEmpty(tt) { + tt.Set(reflect.ValueOf(v)) + } + } + } + + return a +} diff --git a/Modles/util/reflect.go b/Modles/util/reflect.go new file mode 100644 index 0000000..1cff71a --- /dev/null +++ b/Modles/util/reflect.go @@ -0,0 +1,19 @@ +package util + +import "reflect" + +type reflectR struct{} + +var Reflect reflectR + +func (*reflectR) IsEmpty(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.String: + return v.String() == "" + default: + panic("未设定值") + } + return false +} diff --git a/Util/init.go b/Util/init.go index ecdc953..f695ba8 100644 --- a/Util/init.go +++ b/Util/init.go @@ -10,23 +10,12 @@ import ( func init() { //配置文件初始化 Path := "Config.json" + var c Modles.Config if !File.Exists(Path) { - if err := File.WriteJson(Path, &Modles.Config{ //默认值 - From: Modles.LoginForm{ - Domain: "www.msftconnecttest.com", - UserName: "", - PassWord: "", - }, - Meta: Modles.LoginMeta{ - N: "200", - VType: "1", - Acid: "5", - Enc: "srun_bx1", - }, - Settings: Modles.Settings{ - Dns: "1.2.4.8", - }, - }); err != nil { + if err := File.WriteJson( + Path, + c.FillDefault(), + ); err != nil { log.Println("创建配置文件失败:\n", err.Error()) os.Exit(1) } @@ -34,11 +23,12 @@ func init() { os.Exit(0) } - var c Modles.Config if err := File.ReadJson(Path, &c); err != nil { log.Println("读取配置文件失败:\n", err.Error()) os.Exit(1) } + _ = File.WriteJson(Path, c.FillDefault()) + Global.Config = &c }