@@ -35,13 +35,17 @@ func Bind(ptr any) error {
35
35
36
36
func bindValue (objVal reflect.Value ) error {
37
37
for i := 0 ; i < objVal .NumField (); i ++ {
38
+ field := objVal .Type ().Field (i )
39
+ if ! field .IsExported () {
40
+ continue
41
+ }
42
+
38
43
fieldVal := objVal .Field (i )
39
44
if fieldVal .Kind () == reflect .Struct {
40
45
if err := bindValue (fieldVal ); err != nil {
41
46
return err
42
47
}
43
48
} else {
44
- field := objVal .Type ().Field (i )
45
49
if err := setToDefault (field , fieldVal ); err != nil {
46
50
return err
47
51
}
@@ -92,43 +96,42 @@ func setFromEnv(field reflect.StructField, val reflect.Value) {
92
96
func set (val reflect.Value , str string ) error {
93
97
switch val .Type ().Kind () {
94
98
case reflect .String :
95
- typed , _ := getValue (val .Type (), str )
96
- val .SetString (typed .(string ))
99
+ val .SetString (str )
97
100
98
101
case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
99
- typed , err := getValue ( val .Type (), str )
102
+ typed , err := strconv . ParseInt ( str , 10 , val .Type (). Bits () )
100
103
if err != nil {
101
104
return err
102
105
}
103
- val .SetInt (typed .( int64 ) )
106
+ val .SetInt (typed )
104
107
105
108
case reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 :
106
- typed , err := getValue ( val .Type (), str )
109
+ typed , err := strconv . ParseUint ( str , 10 , val .Type (). Bits () )
107
110
if err != nil {
108
111
return err
109
112
}
110
- val .SetUint (typed .( uint64 ) )
113
+ val .SetUint (typed )
111
114
112
115
case reflect .Float32 , reflect .Float64 :
113
- typed , err := getValue ( val .Type (), str )
116
+ typed , err := strconv . ParseFloat ( str , val .Type (). Bits () )
114
117
if err != nil {
115
118
return err
116
119
}
117
- val .SetFloat (typed .( float64 ) )
120
+ val .SetFloat (typed )
118
121
119
122
case reflect .Complex64 , reflect .Complex128 :
120
- typed , err := getValue ( val .Type (), str )
123
+ typed , err := strconv . ParseComplex ( str , val .Type (). Bits () )
121
124
if err != nil {
122
125
return err
123
126
}
124
- val .SetComplex (typed .( complex128 ) )
127
+ val .SetComplex (typed )
125
128
126
129
case reflect .Bool :
127
- typed , err := getValue ( val . Type (), str )
130
+ typed , err := strconv . ParseBool ( str )
128
131
if err != nil {
129
132
return err
130
133
}
131
- val .SetBool (typed .( bool ) )
134
+ val .SetBool (typed )
132
135
133
136
case reflect .Array , reflect .Slice :
134
137
elementType := val .Type ().Elem ()
@@ -156,47 +159,3 @@ func set(val reflect.Value, str string) error {
156
159
157
160
return nil
158
161
}
159
-
160
- func getValue (fieldType reflect.Type , str string ) (any , error ) {
161
- switch fieldType .Kind () {
162
- case reflect .String :
163
- return str , nil
164
-
165
- case reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 :
166
- typed , err := strconv .ParseInt (str , 10 , fieldType .Bits ())
167
- if err != nil {
168
- return nil , err
169
- }
170
- return typed , nil
171
-
172
- case reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 :
173
- typed , err := strconv .ParseUint (str , 10 , fieldType .Bits ())
174
- if err != nil {
175
- return nil , err
176
- }
177
- return typed , nil
178
-
179
- case reflect .Float32 , reflect .Float64 :
180
- typed , err := strconv .ParseFloat (str , fieldType .Bits ())
181
- if err != nil {
182
- return nil , err
183
- }
184
- return typed , nil
185
-
186
- case reflect .Complex64 , reflect .Complex128 :
187
- typed , err := strconv .ParseComplex (str , fieldType .Bits ())
188
- if err != nil {
189
- return nil , err
190
- }
191
- return typed , nil
192
-
193
- case reflect .Bool :
194
- typed , err := strconv .ParseBool (str )
195
- if err != nil {
196
- return nil , err
197
- }
198
- return typed , nil
199
- }
200
-
201
- return nil , errUnsupportedType {fieldType }
202
- }
0 commit comments