<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] > [gitbook 參考](https://astaxie.gitbooks.io/build-web-application-with-golang/zh/) ## demo ``` package main import ( "fmt" "html/template" "log" "net/http" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { log.Println("打印到控制臺") //2018/07/23 10:05:55 打印到控制臺 fmt.Fprintf(w, "Hello astaxie!") //這個寫入到w的是輸出到客戶端的 } func login(w http.ResponseWriter, r *http.Request) { r.ParseForm() //需要加這一步,才能解析 post 表單 fmt.Println("method:", r.Method) if r.Method == "GET" { t, e := template.ParseFiles("login.gtpl") //加載模板文件 if e != nil { log.Println(e) } log.Println(t.Execute(w, nil)) } else { fmt.Println("username:", r.Form["username"]) fmt.Println("password:", r.Form["password"]) } } func main() { http.HandleFunc("/", sayhelloName) //設置訪問的路由 http.HandleFunc("/login", login) //設置訪問的路由 err := http.ListenAndServe(":9090", nil) //設置監聽的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } } ``` ## 原生獲取get post 參數 ``` Form:存儲了post、put和get參數,在使用之前需要調用ParseForm方法。 PostForm:存儲了post、put參數,在使用之前需要調用ParseForm方法。 (x-www-form-urlencode) MultipartForm:存儲了包含了文件上傳的表單的post參數,在使用前需要調用ParseMultipartForm方法。(foram-data) ``` ### 獲取get 參數 ``` //獲取多個參數 values := r.URL.Query() log.Println(values) //map[age:[1] ip:[127.0.0.1]] //獲取單個 age := values.Get("age") //1 log.Println(age) ``` ### 獲取post 參數 ``` //獲取單個 name := r.PostFormValue("name") log.Println(name) //獲取多個 r.ParseForm() values := r.PostForm log.Println(values) // 方式一.獲取單個 log.Println(values["name"]) //方式二.獲取單個 name = values.Get("name") log.Println(name) ``` ## request.Form 參數格式 ``` v := url.Values{} v.Set("name", "Ava") v.Add("friend", "Jess") v.Add("friend", "Sarah") v.Add("friend", "Zoe") // v.Encode() == "name=Ava&friend=Jess&friend=Sarah&friend=Zoe" fmt.Println(v.Get("name")) //fmt.Println(v.Get("friend")) //Jess fmt.Println(v["friend"]) //[Jess Sarah Zoe] ``` ## 表單上傳驗證 ### 判斷是否是整數 ``` etint, err := strconv.Atoi(r.Form.Get("age")) if err != nil { //數字轉化出錯了,那么可能就不是數字 } fmt.Println(etint) ``` ### 驗證是否中文 ``` if m, _ := regexp.MatchString("^\\p{Han}+$", r.Form.Get("realname")); !m { return false } ``` ### 英文 ``` if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m { return false } ``` ### 電子郵件地址 ``` if m, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$`, r.Form.Get("email")); !m { fmt.Println("no") }else{ fmt.Println("yes") } ``` ### 手機號碼 ``` if m, _ := regexp.MatchString(`^(1[3|4|5|8][0-9]\d{4,8})$`, r.Form.Get("mobile")); !m { return false } ``` ### 下拉菜單 ``` slice:=[]string{"apple","pear","banane"} v := r.Form.Get("fruit") for _, item := range slice { if item == v { return true } } return false ``` ### 單選按鈕 ``` slice:=[]int{1,2} for _, v := range slice { if v == r.Form.Get("gender") { return true } } return false ``` ### 復選框 ``` slice:=[]string{"football","basketball","tennis"} a:=Slice_diff(r.Form["interest"],slice) if a == nil{ return true } return false ``` > [Slice_diff 函數在github](https://github.com/astaxie/beeku) ### 日期和時間 ``` t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) fmt.Printf("Go launched at %s\n", t.Local()) ``` ### 身份證號碼 ``` //驗證15位身份證,15位的是全部數字 if m, _ := regexp.MatchString(`^(\d{15})$`, r.Form.Get("usercard")); !m { return false } //驗證18位身份證,18位前17位為數字,最后一位是校驗位,可能為數字或字符X。 if m, _ := regexp.MatchString(`^(\d{17})([0-9]|X)$`, r.Form.Get("usercard")); !m { return false } ``` ## 預防跨站腳本 ``` fmt.Println("username:", template.HTMLEscapeString(r.Form.Get("username"))) //輸出到后臺 <cpj> -> &lt;cpj&gt; template.HTMLEscape(w, []byte(r.Form.Get("username"))) // 輸出到 客戶端 <cpj> -> &lt;cpj&gt; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看