package config import ( "fmt" "reflect" ) type IConfig interface { Invalidate() error } func Invalidate(config IConfig) error { if config == nil { return fmt.Errorf("config must not be a nil") } val := reflect.ValueOf(config) if val.Kind() != reflect.Struct { if val.IsZero() { return fmt.Errorf("config is empty") } val = reflect.ValueOf(config).Elem() } for i := 0; i < val.NumField(); i++ { if !val.Field(i).CanInterface() || val.Field(i).IsZero() { continue } if elm, ok := val.Field(i).Interface().(IConfig); ok { if er := elm.Invalidate(); er != nil { return er } } } return nil }