为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 将映射键设置为其值的变量

Golang 将映射键设置为其值的变量

Go
婷婷同学_ 2021-11-01 15:09:10
我需要通过 html 表单输入值并将它们放入 mysql 数据库中。我目前正在使用它r.Form来获取地图。这样我就不必r.Form.Get("date")为每一个都使用,但是当我尝试将值放入数据库时。它编译得很好,但我sql: converting argument #0's type: unsupported type []string, a slice在浏览器中单击提交后得到了。我可以通过这样做来解决这个问题`date := strings.Join(m["date"], "")`但是对 30 多个值执行此操作,尤其是因为某些提交的值将使用 html 模板从以前的数据库条目中创建。如果我以后必须更改或添加更多内容,似乎必须有一种更有效的方法,for key, val := range m {}但不幸的是,我只这样做了大约一个星期,我不知道如何保留这些值并更改它们在每次迭代后设置为变量。这样之后for key, val := range m {x := m[key]}这样它就会推出等效的keyname := keyvalue每次将键名更改为与映射中的键名相同,即date := 2015-8-13time := 18:56:11或者如果有更简单的方法可以解决此错误,则为每个错误创建一个变量。
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

HTML 表单的一个键可以有多个值。这就是请求表单字段被定义为字符串切片映射的原因。该请求书表格被声明为


 Form url.Values

和url.Values被声明为


  type Values map[string][]string

您可以使用以下方法访问键的第一个值:


   var value string

   if values := req.Form[key]; len(values) > 0 {

      value = values[0]

   }

该url.Values获取的辅助方法简化了这个代码:


   value := req.Form.Get(key)

该http.Request FormValue辅助方法,简化了多一点:


  value := req.FormValue(key)

您可以使用以下方法遍历键和值:


  for key, values := range req.Form {

     for _, value := range values {

         fmt.Println(key, value)

     }

  }

如果要迭代键的第一个值,请使用以下代码:


 for key, values := range req.Form {

    if len(values) > 0 {

       value := values[0]

       fmt.Println(key, value)

    }

 }

在访问 req.Form 之前,调用req.ParseForm解析查询字符串和请求体。


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信