我是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
}
}
}
答案 0 :(得分:1)
那是因为v
是[]string
(字符串切片),而不是string
(Atoi
接受的是什么)。 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
}