1. 首页
  2. 主题
  3. Go问与答

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

hellsam · · 1458 次点击
~~~ 问个问题 关于golang提交表单 按顺序接受问题 举个例子 cname0=aaa&cname1=bbb&cname2=ccc 这样的一个表单 我尝试用 r.PostForm,r.Form 等接受 都会造成随机打乱 有什么办法按顺序一个个接受呢 当然也可能表单如这样的发来 cname2=bb&cname1=aa&cname3=cc 那么就要用这个方法来接受顺序 ~~~
和解析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

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中