Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang中http请求中表单变量的嵌套值_Http_Go - Fatal编程技术网

golang中http请求中表单变量的嵌套值

golang中http请求中表单变量的嵌套值,http,go,Http,Go,我来自PHP背景,我正在努力学习围棋 过去,我可以从bash运行以下命令: curl -X POST http://192.168.12.107/restfulendpoint.php \ -H "Content-Type: application/x-www-form-urlencoded" \ -d \ "menu[0][name]=pizza&menu[0][price]=12.00&menu[1][name]=orange juice&

我来自PHP背景,我正在努力学习围棋

过去,我可以从bash运行以下命令:

curl -X POST http://192.168.12.107/restfulendpoint.php \
-H "Content-Type: application/x-www-form-urlencoded" \
-d \
"menu[0][name]=pizza&menu[0][price]=12.00&menu[1][name]=orange juice&menu[1][price]=1.00"
我的
restfulendpoint.php
自然会收到一个
POST
数组,该数组采用如下嵌套格式

Array
(
    [menu] => Array
        (
            [0] => Array
                (
                    [name] => pizza
                    [price] => 12.00
                )

            [1] => Array
                (
                    [name] => orange juice
                    [price] => 1.00
                )

        )

)
然后我创建了一个go脚本,我希望它能产生类似的行为。我写了这个
restfulendpoint.go

func Post(w http.ResponseWriter, r *http.Request) {
  url := mux.Vars(r)
  r.ParseForm()
  qs := r.Form
  log.Println(qs)
}
但当我收到帖子内容时,我会得到如下结构:

map[menu[0][price]:[12.00] menu[1][name]:[orange juice] menu[1][price]:[1.00] menu[0][name]:[pizza]]
map[menu:[map[name:pizza price:12.00] map[name:pizza price:12.00]]]
Go将每个
map[][price | name]
视为地图中的一个单独键。我真正想要的是这样的输出:

map[menu[0][price]:[12.00] menu[1][name]:[orange juice] menu[1][price]:[1.00] menu[0][name]:[pizza]]
map[menu:[map[name:pizza price:12.00] map[name:pizza price:12.00]]]

在调用
restfulendpoint.go
时,如果每个菜单项都有一个name和price属性,我是否应该遵循一个约定,这样我就可以自然地接收模式中的数据?或者我应该在go脚本中做些什么来保留数据模式?

看起来go的
ParseForm
不适合用于编码层次结构的格式。我认为您要么将正文作为原始文件读取,然后自己对其进行解析,要么,如果您可以选择更改post格式,只需将正文作为JSON而不是表单发送。

在application/x-www-form-urlencoded中没有嵌套值;这就是为什么它的类型是
map[string][]string
菜单[0][name]
东西是PHP发明的,如果你想获得等价的语义,你必须自己解码表单。或者使用支持复杂值的编码,比如JSON