From 0c31c2d689f3a35c9a2c9651914f05fe7f590be8 Mon Sep 17 00:00:00 2001 From: Sergey Shcherbina Date: Sun, 22 Feb 2015 22:13:06 +0500 Subject: [PATCH] Added support to parse slices of ints and strings in ParseForm func --- templatefunc.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/templatefunc.go b/templatefunc.go index 1224e82f..28ed15a3 100644 --- a/templatefunc.go +++ b/templatefunc.go @@ -358,11 +358,32 @@ func ParseForm(form url.Values, obj interface{}) error { } fieldV.Set(reflect.ValueOf(t)) } + case reflect.Slice: + if fieldT.Type == sliceOfInts { + formVals := form[tag] + fieldV.Set(reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf(int(1))), len(formVals), len(formVals))) + for i := 0; i < len(formVals); i++ { + val, err := strconv.Atoi(formVals[i]) + if err != nil { + return err + } + fieldV.Index(i).SetInt(int64(val)) + } + } else if fieldT.Type == sliceOfStrings { + formVals := form[tag] + fieldV.Set(reflect.MakeSlice(reflect.SliceOf(reflect.TypeOf("")), len(formVals), len(formVals))) + for i := 0; i < len(formVals); i++ { + fieldV.Index(i).SetString(formVals[i]) + } + } } } return nil } +var sliceOfInts = reflect.TypeOf([]int(nil)) +var sliceOfStrings = reflect.TypeOf([]string(nil)) + var unKind = map[reflect.Kind]bool{ reflect.Uintptr: true, reflect.Complex64: true,