code: func ReflectExportedStructFields(v reflect.Value) map[string]reflect.Value {
  	t := v.Type()
  	if t.Kind() != reflect.Struct {
  		panic(fmt.Errorf("Expected a struct, got %s", t))
  	}
  	result := make(map[string]reflect.Value)
  	reflectExportedStructFields(v, t, result)
  	return result
  }
docs: /*
  ReflectExportedStructFields returns a map from exported struct field names to values,
  inlining anonymous sub-structs so that their field names are available
  at the base level.
  Example:
  	type A struct {
  		X int
  	}
  	type B Struct {
  		A
  		Y int
  	}
  	// Yields X and Y instead of A and Y:
  	ReflectExportedStructFields(reflect.ValueOf(B{}))
  */