我来自PHP背景,正在尝试学习Go。
过去,我可以从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)
}
但是当我收到POST内容时,我得到的结构是这样的:
map[menu[0][price]:[12.00] menu[1][name]:[orange juice] menu[1][price]:[1.00] menu[0][name]:[pizza]]
Go将每个map[<int>][price|name]
视为地图中的单独键。我真正想要的是这样的输出:
map[menu:[map[name:pizza price:12.00] map[name:pizza price:12.00]]]
在对curl
的{{1}}调用中应该遵循一个约定,以便在每个菜单项都具有name和price属性的情况下,我自然可以在模式中接收数据吗?还是我应该在go脚本中做一些事情来保存数据模式?
答案 0 :(得分:2)
go的ParseForm
似乎无法满足您用来编码分层结构的格式。我认为您面对的是要么原始读取主体,然后自己对其进行解析,或者,如果您可以更改帖子格式,则只需将主体作为JSON而不是表单发送即可。