把配置文件进行md5,保存其md5值。在调用这个函数时,再次读取文件进行md5。两者比对,如果相等就不执行下面的逻辑。
这样就解决了,一模一样的配置文件,保存多次,不会执行后续的逻辑。
但是,杜绝了大部分的场景,比如修改了一次,保存了两次,依旧会有看起来一模一样的配置,md5值不同
| 12
 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!")
 })
 }
 
 |