Ted's Blog



golang 接收POST表单数组


现在好多phper都开始转go了,在php开发中对数组的操作都是很随意的,接收也很好处理


前端表单一般会有这种编写的情况

<input type="checkbox" name="answers[16][]"  value="封装">
<input type="checkbox" name="answers[16][]"  value="继承">
<input type="checkbox" name="answers[16][]"  value="多态">

这种 name 是以数组的方式提交数据,提交的结构如下图


在PHP里直接 $_POST["answers[]"] 就可以接收了,但是在go语言中就很麻烦


直接上代码:

// MultiRelationPost 处理用户发送的表单多维数组数据
func (this *baseController) MultiRelationPost(keyName string) (map[string][]string) {

   // 声明一个map 用来存储返回数据
   data := make(map[string][]string)

   // 遍历表单数据
   for i := range this.Ctx.Request.Form {

      // 判断 i 是否有前缀字符串prefix。
      if strings.HasPrefix(i, keyName + "[") {

         // 将前缀 和 后缀 中括号[] 替换为空
         rp := strings.NewReplacer(keyName + "[", "", "[]", "", "]", "")

         // Replace返回 i 的所有替换进行完后的拷贝。
         data[rp.Replace(i)] = this.Ctx.Request.Form[i]
      }
   }

   return data
}


这种接收方式会将数据 接收为 map[16:[封装 继承 多态]] ,二维数组部分会变为 字符串类型的切片


如果 前端使用一维数组

<input type="checkbox" name="test[]"  value="封装">
<input type="checkbox" name="test[]"  value="继承">
<input type="checkbox" name="test[]"  value="多态">

接收结果就会变为 map[:[封装 继承 多态]] ,需要通过下标"" 空字符串来取map中的内容

test := this.MultiRelationPost("test")
fmt.Println(test[""])


分享内容希望对你有帮助,如果你有更好的方法希望能通过留言的方式告诉我,相互交流🤟👏👏👏

分享:

评论列表

笔名  :  Ted

2021-05-12 18:05:42

如果有更好的方法欢迎留言交流!!!


写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn