config.go 481 B

12345678910111213141516171819202122232425262728
  1. package config
  2. import "reflect"
  3. type IConfig interface {
  4. Invalidate() error
  5. }
  6. func Invalidate(config IConfig) error {
  7. if config == nil || reflect.ValueOf(config).IsZero() {
  8. return nil
  9. }
  10. r := reflect.ValueOf(config).Elem()
  11. for i := 0; i < r.NumField(); i++ {
  12. if !r.Field(i).CanInterface() || r.Field(i).IsZero() {
  13. continue
  14. }
  15. if elm, ok := r.Field(i).Interface().(IConfig); ok {
  16. if er := elm.Invalidate(); er != nil {
  17. return er
  18. }
  19. }
  20. }
  21. return nil
  22. }