我是刚接触Go语言的人,并且肯定会错过一些非常基本的东西,但是由于我已经在网上进行搜索并且没有找到任何可帮助我理解我的问题的信息,所以我想将其发布在这里。本质上,我想做的是从字符串到整数的简单转换。字符串以表示为字符串的数值(即“1”)的形式到达;我想将其更改为int等效项,以便可以在switch ...情况下使用它。我已经尝试了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
                }
            }
        }

最佳答案

错误告诉您正在将[]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
}

关于for-loop - 在for循环中使用AtoI时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48102551/

10-16 16:44