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[""])
分享内容希望对你有帮助,如果你有更好的方法希望能通过留言的方式告诉我,相互交流🤟👏👏👏