项目开发中经常遇到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))
}
}
}
}