For loop 在for循环中使用AtoI时出错

For loop 在for循环中使用AtoI时出错,for-loop,go,For Loop,Go,我是go lang的新手,我确信我遗漏了一些非常基本的东西,但是因为我已经搜索了网络,没有找到任何东西来帮助我理解我的问题,我想我会把它贴在这里。本质上,我试图做的是一个从字符串到int的简单转换。字符串以字符串表示的数值形式到达(即“1”);我想把它改成int等值,这样我就可以在开关中使用它了。。。案例我尝试了Atoi和parseInt,但都失败了,出现了相同的错误: ./test.go:1765: cannot use v (type []string) as type string in

我是go lang的新手,我确信我遗漏了一些非常基本的东西,但是因为我已经搜索了网络,没有找到任何东西来帮助我理解我的问题,我想我会把它贴在这里。本质上,我试图做的是一个从字符串到int的简单转换。字符串以字符串表示的数值形式到达(即“1”);我想把它改成int等值,这样我就可以在开关中使用它了。。。案例我尝试了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
                }
            }
        }

这是因为
v
是一个
[]字符串
(字符串片段),而不是
字符串
Atoi
接受的内容)<代码>请求。表单是字段名到值的映射;由于HTML表单允许使用相同名称的多个字段,因此这些值必须保存在一个切片中。您可以尝试
v[0]
获取字段的第一个值,这可能会或可能不会满足您的要求-我不能确定,因为您没有详细说明您要实现的目标。

这是因为
v
是一个
[]字符串(字符串的一部分),而不是
字符串(Atoi
接受的内容)<代码>请求。表单
是字段名到值的映射;由于HTML表单允许使用相同名称的多个字段,因此这些值必须保存在一个切片中。您可以尝试
v[0]
获取字段的第一个值,该值可能会做您想做的事情,也可能不会做您想做的事情-我不能肯定,因为您没有详细说明您要完成的事情。

错误告诉您正在将
[]字符串
传递给
字符串
参数

如果应用程序不使用表单字段的多个值,并且应用程序不需要区分缺少的表单字段和“”,则通常会调用以获取表单值。此方法返回键的第一个值,如果键不存在,则返回“”

不需要在表单字段上循环。只要取你想要的字段

下面是如何编写上面的代码

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")
如果希望客户机指定一个字段,那么如果v:=r.FormValue(“key”),则删除
;v!=无业务

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

错误告诉您正在将
[]字符串
传递给
字符串
参数

如果应用程序不使用表单字段的多个值,并且应用程序不需要区分缺少的表单字段和“”,则通常会调用以获取表单值。此方法返回键的第一个值,如果键不存在,则返回“”

不需要在表单字段上循环。只要取你想要的字段

下面是如何编写上面的代码

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")
如果希望客户机指定一个字段,那么如果v:=r.FormValue(“key”),则删除
;v!=无业务

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