Go Web2. 表单Form

处理表单的输入

// main.go

package main

import (

    "fmt"

    "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")

        // log.Println(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)

    }

}

通过上面的代码我们可以看出获取请求方法是通过r.Method来完成的,这是个字符串类型的变量,返回GET, POST, PUT等method信息。

login函数中我们根据r.Method来判断是显示登录界面还是处理登录逻辑。当GET方式请求时显示登录界面,其他方式请求时则处理登录逻辑,如查询数据库、验证登录信息等。

浏览器输入:http://localhost:9090/login

r.Form参数

r.Form里面包含了所有请求的参数,比如URL中query-string、POST的数据、PUT的数据,所以当URL中的query-string字段和POST冲突时,会保存成一个slice,里面存储了多个值,Go官方文档中说在接下来的版本里面将会把POST、GET这些数据分离开来。

Tips

1、Request本身也提供了FormValue()函数来获取用户提交的参数。如r.Form["username"]也可写成r.FormValue("username")。调用r.FormValue时会自动调用r.ParseForm,所以不必提前调用。

2、r.FormValue只会返回同名参数中的第一个,若参数不存在则返回空字符串。

你可能感兴趣的:(Go Web2. 表单Form)