~~~
问个问题
关于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