在for循环中使用AtoI时出错

时间:2018-01-04 19:51:11

标签: for-loop go

我是go lang的新手,我确信我错过了一些非常基本的东西但是因为我已经在网上搜索过并且没有找到任何东西可以帮助我理解我的问题,我想我会在这里发布。基本上我要做的是从字符串到int的简单转换。字符串作为表示为字符串的数值到达(即" 1");我想将它更改为int等效,所以我可以在switch ... case中使用它。我已经尝试了Atoi和parseInt,但都失败并出现同样的错误:

./test.go:1765: cannot use v (type []string) as type string in argument to strconv.Atoi

我首先尝试将其分配给字符串,然后将其传递给Atoi,但它仍然无法正常工作。

以下是代码:

        r.ParseForm()

        for k, v := range r.Form {
            if k == "StartPicker" && strings.Join(v, "") != "" {
               layout := dateLayout
               startDate, err = time.Parse(layout, strings.Join(v, ""))

               if err != nil {
                   fmt.Println("time.Parse() err:", err)
                }

            } else if k == "EndPicker" && strings.Join(v, "") != "" {
                layout := dateLayout
                endDate, err = time.Parse(layout, strings.Join(v, ""))

                if err != nil {
                    fmt.Println("time.Parse() err:", err)
                }
            } else {
                fmt.Printf("k = %s\n", k)

                if k == "FilterType" {
                    fmt.Printf("this is the variable filterType: %s\n", v)
                    time, sqlFilter := strconv.Atoi(v)
                    if err != nil {
                        // handle error
                        fmt.Println("Atoi broken err:", err)
                    }

                } else if k == "MSISDN" {
                    msisdn := v
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

那是因为v[]string(字符串切片),而不是stringAtoi接受的是什么)。 Request.Form是值map的字段名称;因为HTML表单允许同名的多个字段,所以值必须保存在切片中。您可以尝试v[0]获取该字段的第一个值,这可能会或可能不会达到您想要的效果 - 我无法确定,因为您没有详细说明您的内容试图完成。

答案 1 :(得分:1)

错误告诉您正在将[]string传递给string参数。

如果应用程序没有使用表单字段的多个值,并且应用程序不需要区分缺少的表单字段和"",那么它通常是调用Request.FormValue获取表单值。此方法返回键的第一个值或""如果密钥不存在。

没有必要循环表单字段。只需获取您想要的字段。

以下是如何编写上述代码的方法。

var startDate time.Time
if v := r.FormValue("StartPicker"); v != "" {
    var err error
    startDate, err = time.Parse(dateLayout, v)
    if err != nil {
        // handle error
    }
}

var endDate time.Time
if v := r.FormValue("EndPicker"); v != "" {
    var err error
    startDate, err = time.Parse(dateLayout, v)
    if err != nil {
        // handle error
    }
}

var filterType int
if v := r.FormValue("FilterType"); v != "" {
    var err error
    filterType, err = strconv.Atoi(v)
    if err != nil {
        // handle error
    }
}

msisdn := r.FormValue("MSISDN")

如果要求客户指定字段,则取消if v := r.FormValue("key"); v != nil业务。

filterType, err = strconv.Atoi(r.FormValue("FilterType"))
if err != nil {
    // handle error
}