package config import "reflect" type IConfig interface { Invalidate() error } func Invalidate(config IConfig) error { if config == nil || reflect.ValueOf(config).IsZero() { return nil } r := reflect.ValueOf(config).Elem() for i := 0; i < r.NumField(); i++ { if !r.Field(i).CanInterface() || r.Field(i).IsZero() { continue } if elm, ok := r.Field(i).Interface().(IConfig); ok { if er := elm.Invalidate(); er != nil { return er } } } return nil }