I have a struct
that looks like this:
type guitaristT struct {
Surname string `required=true`
Year int64 `required=false`
American bool // example of missing tag
Rating float32 `required=true`
Styles []string `required=true,minsize=1`
}
I have an environment variable that looks like the following, and I'm using reflection to fill the struct based on the keys.
jimiEnvvar :="surname=Hendrix|year=1942|american=true|rating=9.99
|styles=blues|styles=rock|styles=psychedelic"
I'm able to set the string, int64, bool and float32
fields using reflection, but I'm stuck on how to append to the slice
field Styles. For example, based on the above jimiEnvvar
I would like the field jimi.Styles
to have the values ["blues","rock", "psychedelic"]
.
I have the following (simplified) code:
result := guitaristT{}
result.Styles = make([]string, 10)
...
v := reflect.ValueOf(&result).Elem()
...
field := v.FieldByName(key) // eg key = "styles"
...
switch field.Kind() {
case reflect.Slice:
// this is where I get stuck
//
// reflect.Append() has signature:
// func Append(s Value, x ...Value) Value
// so I convert my value to a reflect.Value
stringValue := reflect.ValueOf(value) // eg value = "blues"
// but this doesn't append:
field = reflect.Append(field, stringValue)
If you're interested, the full code is at http://ift.tt/2hUOEfA . It just some notes I'm writing for myself; crazy names I know :-)
Aucun commentaire:
Enregistrer un commentaire