reflect.go
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
}
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
}
func ReflectExportedStructFields ( v reflect . Value ) map [ string ] reflect . Value { t := v . Type ( ) if t . Kind ( ) != reflect . Struct { panic ( fmt . Errorf ( " " , t ) ) } result := make ( map [ string ] reflect . Value ) reflectExportedStructFields ( v , t , result ) return result }
/*
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{}))
*/
/ * 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 {} ))