diff --git a/cast_test.go b/cast_test.go index d9a1479..da7c15f 100644 --- a/cast_test.go +++ b/cast_test.go @@ -1051,6 +1051,10 @@ func TestToStringSliceE(t *testing.T) { {[]string{"a", "b"}, []string{"a", "b"}, false}, {[]interface{}{1, 3}, []string{"1", "3"}, false}, {interface{}(1), []string{"1"}, false}, + {"a", []string{"a"}, false}, + {"a b", []string{"a", "b"}, false}, + {"a,b", []string{"a", "b"}, false}, + {"a b,c", []string{"a", "b,c"}, false}, // errors {nil, nil, true}, {testing.T{}, nil, true}, diff --git a/caste.go b/caste.go index 70c7291..2ece6d1 100644 --- a/caste.go +++ b/caste.go @@ -1130,7 +1130,14 @@ func ToStringSliceE(i interface{}) ([]string, error) { case []string: return v, nil case string: - return strings.Fields(v), nil + slice := strings.Fields(v) + // if the string can be splited by white space + // return slice immediately + if len(slice) > 1 { + return slice, nil + } + // otherwise, try to split string by comma + return strings.Split(v, ","), nil case interface{}: str, err := ToStringE(v) if err != nil {