對於表單form都不陌生,GO是如何處理表單的呢?
先寫個例子:html
<html> <head> <title></title> </head> <body> <form action="/login" method="post"> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <input type="submit" value="登錄"> </form> </body> </html>
文件命名爲login.gtpl
(與html無異)
緊接着,須要有http服務瀏覽器
package main import ( "fmt" "html/template" "log" "net/http" "strings" ) func login(w http.ResponseWriter, r *http.Request) { fmt.Println("method:", r.Method) //獲取請求的方法 if r.Method == "GET" { t, _ := template.ParseFiles("login.gtpl") t.Execute(w, nil) } else { r.ParseForm() //請求的是登錄數據,那麼執行登錄的邏輯判斷 fmt.Println("username:", r.Form["username"]) fmt.Println("password:", r.Form["password"]) } } func main() { http.HandleFunc("/login", login) //設置訪問的路由 err := http.ListenAndServe(":9090", nil) //設置監聽的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } }
這就寫好了一個可以完成登錄操做的功能。
用戶訪問http://domain:9090/login
便可看到登錄界面。緊接着輸入用戶名和密碼便可完成登錄。
中間都發生了什麼事情呢?dom
這就是請求的過程。以後是響應過程post
r.Method
拿到請求的方法template.ParseFiles("login.gtpl")
。而且將模板響應(w)t.Execute(w, nil)
給客戶端,瀏覽器上顯示登錄界面。action="/login"
。r.ParseForm()
而且將相關信息打印出來。這裏須要注意的一點是。Handler是不會自動解析表單的,須要顯示的調用r.ParseForm()
。才能對錶單執行操做r.Form["username"]
request.Form
是一個url.Values
類型,裏面存儲的是對應的相似key=value
的信息
另外Request
自己提供了FormValue()
來獲取用戶提供的參數。如r.Form["username"]
也可寫成r.FormValue("username")
。調用r.FormValue
時會自動調用r.ParseForm
,因此沒必要提早調用。url