新發現:r.Form
裏面包含了全部請求的參數,好比URL中query-string、POST的數據、PUT的數據,全部當你在URL的query-string字段和POST衝突時,會保存成一個slice,裏面存儲了多個值
舉個例子:前端
<form action="/login?username=go" method="post">//get方法傳遞username=go 用戶名:<input type="text" name="username">//用post方法傳遞username
在提交表單後,打印r.Form
後端
fmt.Println(r.Form);
獲得post
map[username:[postname go]
發生衝突的字段,值會被保存成爲slice。
在取值的時候有兩種方法。r.Form
能夠取到鍵所對應的所有值。但若是鍵不存在則會報錯。通常單選框或複選框,在不選中的狀況下,form表單根本不會提交這些字段,因此很容易出現r.Form
獲取鍵不存在的字段。r.Form.GET
只可以拿到字段中的第一個值。若是鍵不存在,不會報錯,會返回空值。
對比不難發現,通常單選框和複選框等字段須要r.Form.GET
方法獲取,而會出現多值的字段則須要用r.Form
的方式獲取。code
言歸正傳,此次想說一些關於表單驗證的方法。表單驗證通常前端後端都會作,不過區別是,「前端防君子,後端防小人」。regexp
if len(r.Form["username"][0])==0{ //爲空的處理 }
getint,err:=strconv.Atoi(r.Form.Get("age"))//字符串轉整 if err!=nil{ //數字轉化出錯了,那麼可能就不是數字 } //接下來就能夠判斷這個數字的大小範圍了 if getint >100 { //太大了 }
或是使用正則orm
if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m { return false }
還有不少驗證,都有不止一種方法可以達到驗證效果,再也不一一贅述了。字符串