项目开发中经常遇到config不断更新的情况,如果还没有一套成熟的体系保障配置文件及时更新,可以试试用反射判断


type Config  struct {
Addr      string       `binding:"required"`
Port      int          `binding:"required"`
MysqlStr  string       `binding:"required"`

}
func checkRequired(str interface{}) {
    t := reflect.TypeOf(str)
    v := reflect.ValueOf(str)
    for k := 0; k < t.NumField(); k++ {
        fieldType := v.Field(k).Kind()
        if fieldType == reflect.Struct {
            checkRequired(v.Field(k).Interface())
        }
        if t.Field(k).Tag.Get("binding") == "required" {
            if v.Field(k).IsZero() {
                panic(fmt.Sprintf("%+v can not be zero", t.Field(k).Name))
            }
        }
    }
}