如何利用golang 获取按顺序的表单呢

hellsam · · 1049 次点击
和解析json一样啊…… ```go package main import ( "fmt" "io" "net/http" "net/url" "strings" ) type KeyValue struct { Key string Value string } func main() { s := http.Server{ Addr: "127.0.0.1:8000", } s.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { result := []KeyValue{} body, err := io.ReadAll(r.Body) if err != nil { panic(err) } fields := strings.Split(string(body), "&") for _, v := range fields { str := strings.SplitN(v, "=", 2) key, err := url.QueryUnescape(str[0]) if err != nil { panic(err) } kv := KeyValue{Key: key} if len(str) > 1 { value, err := url.QueryUnescape(str[1]) if err != nil { panic(err) } kv.Value = value } result = append(result, kv) } fmt.Println(result) w.Write([]byte("ok")) }) s.ListenAndServe() defer s.Close() } ``` 然后 ``` curl -X POST --data-raw "cname0=aaa&cname1=bbb&cname2=ccc" http://127.0.0.1:8000 ``` 输出 ``` [{cname0 aaa} {cname1 bbb} {cname2 ccc}] ```
#4
更多评论
查了下 在.net里 有个方法 Request.Form.AllKeys 的Allkeys 可以一次性获取按顺序好的 key值 然后进行遍历这个数组即可 我发现golang的 r.form r.postform 都是 map模式, 故我怀疑 实际表单拿到Map后 就被打乱了顺序。造成的。 请问有办法解决吗
#1
这个表单需要key的顺序就不合理…… 一定要的话,自己把body读出来,split一下分别urldecode就行
#2