github.com/golang-infrastructure/go-reflect-utils@v0.0.0-20221130143747-965ef2eb09c3/walk.go (about)

     1  package reflect_utils
     2  
     3  //func Walk(v any, visitor func(key, value reflect.ItemValue) bool) {
     4  //	reflectValue := reflect.ValueOf(v)
     5  //	reflectType := reflect.TypeOf(v)
     6  //	switch reflectType.Kind() {
     7  //	case reflect.Struct:
     8  //		for i := 0; i < reflectType.NumField(); i++ {
     9  //			v := reflectValue.Field(i)
    10  //			if !visitor(v, nil) {
    11  //				return
    12  //			}
    13  //		}
    14  //	case reflect.Slice, reflect.Array:
    15  //		for i := 0; i < reflectValue.Len(); i++ {
    16  //			v := reflectValue.Index(i)
    17  //			if !visitor(v, nil) {
    18  //				return
    19  //			}
    20  //		}
    21  //	case reflect.Map:
    22  //		keys := reflectValue.MapKeys()
    23  //		for i := range keys {
    24  //			// TODO
    25  //		}
    26  //	default:
    27  //		visitor(reflectValue, nil)
    28  //	}
    29  //}