go语言web系列1 接收请求的参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Dote2r/article/details/82146000
package main

import (
	"net/http"
	"fmt"
	"net/url"
	"io/ioutil"
	"encoding/json"
	"log"
)

/**
* Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法
* PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法
* MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法
*/

/**
 * r.Form是url.Values字典类型
 * r.Form["id"]取到的是一个数组类型
 * 因为http.request在解析参数的时候会将同名的参数都放进同一个数组里,所以这里要用[0]获取到第一个
 */
func getdemo1(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	if len(r.Form["id"]) > 0 {

		fmt.Fprintln(w, r.Form["id"][0])
	} else {
		fmt.Fprint(w, "获取get请求参数出错")
	}
}

/**
 *	当url参数和post参数都有id时		getdemo1的方法会出现错误
 *	因为r.Form包含了get和post参数	并且以post参数为先		所以应当会取到post参数
 */
func getdemo2(w http.ResponseWriter, r *http.Request) {
	queryForm, err := url.ParseQuery(r.URL.RawQuery)
	if err == nil && len(queryForm["id"]) > 0 {
		//	事实上这个也是标准库ParseForm中关于get参数解析代码
		fmt.Fprintln(w, queryForm["id"][0])
	} else {
		fmt.Fprint(w, "获取get请求参数出错")
	}
}

/**
 * 普通的post表单请求,Content-Type=application/x-www-form-urlencoded
 */
func postdemo1(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, r.PostFormValue("id"))
}

/**
 * 有文件上传的表单,Content-Type=multipart/form-data
 * 这个未走通
 */
func postdemo2(w http.ResponseWriter, r *http.Request) {
	r.ParseMultipartForm(32 << 20)
	if r.MultipartForm != nil {
		values := r.MultipartForm.Value["id"]
		if len(values) > 0 {
			fmt.Fprintln(w, values[0])
		}
	}
}

func jsondemo1(w http.ResponseWriter, r *http.Request) {
	var user map[string]interface{}
	body, _ := ioutil.ReadAll(r.Body)
	json.Unmarshal(body, &user)
	fmt.Fprintln(w, user)
	//fmt.Fprintln(w, user["password"])
	//fmt.Println("获取json中的username:", user["username"])
	//fmt.Println("获取json中的password:", user["password"].(string)) //转字符串通过len(password)!=0判断长度

}

func main() {
	http.HandleFunc("/getdemo1", getdemo1)
	http.HandleFunc("/getdemo2", getdemo2)
	http.HandleFunc("/postdemo1", postdemo1)
	http.HandleFunc("/postdemo2", postdemo2)
	http.HandleFunc("/jsondemo1", jsondemo1)
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}


猜你喜欢

转载自blog.csdn.net/Dote2r/article/details/82146000
今日推荐