把配置文件进行md5,保存其md5值。在调用这个函数时,再次读取文件进行md5。两者比对,如果相等就不执行下面的逻辑。
这样就解决了,一模一样的配置文件,保存多次,不会执行后续的逻辑。
但是,杜绝了大部分的场景,比如修改了一次,保存了两次,依旧会有看起来一模一样的配置,md5值不同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| func GetMD5(s []byte) string { m := md5.New() m.Write([]byte(s)) return hex.EncodeToString(m.Sum(nil)) }
func ReadFileMd5(sfile string) (string, error) { ssconfig, err := os.ReadFile(sfile) if err != nil { return "", err } return GetMD5(ssconfig), nil }
func Init() { filepath := "xxxx" viper.SetConfigFile(filepath)
confMD5, err := ReadFileMd5(filepath) if err != nil { log.Fatal(err) } if err := viper.ReadInConfig(); err != nil { log.Fatal(err) }
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) { tconfMD5, err := ReadFileMd5(filepath) if err != nil { logger.Fatal(err) } if tconfMD5 == confMD5 { return } confMD5 = tconfMD5 log.Println("Config file changed!") }) }
|