Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。
这里主要讲***服务端***的实现
接收get请求,获取参数
func getHandler(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
data := r.URL.Query()
fmt.Println(data.Get("name"))
fmt.Println(data.Get("age"))
answer := `{"status": "ok"}`
w.Write([]byte(answer))
}
接收post请求,获取参数
func postHandler(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
// 1. 请求类型是application/x-www-form-urlencoded时解析form数据
r.ParseForm()
fmt.Println(r.PostForm) // 打印form数据 ,拿到的是map
fmt.Println(r.PostForm.Get("name"), r.PostForm.Get("age")) //拿到的字符串
fmt.Println(r.Form["name"], r.Form["age"]) //拿到的是一个列表
// 2. 请求类型是application/json时从r.Body读取数据
//b, err := ioutil.ReadAll(r.Body)
//if err != nil {
// fmt.Println("read request.Body failed, err:%v\n", err)
// return
//}
//fmt.Println(string(b))
answer := `{"status": "ok"}`
w.Write([]byte(answer))
}
默认的Server
ListenAndServe使用指定的监听地址和处理器启动一个HTTP服务端。处理器参数通常是nil,这表示采用包变量DefaultServeMux作为处理器。
Handle和HandleFunc函数可以向DefaultServeMux添加处理器。
http.Handle("/foo", fooHandler)
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
log.Fatal(http.ListenAndServe(":8080", nil))
默认的Server示例
使用Go语言中的net/http包来编写一个简单的接收HTTP请求的Server端示例,net/http包是对net包的进一步封装,专门用来处理HTTP协议的数据。具体的代码如下:
// http server
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello world!")
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9090", nil)
if err != nil {
fmt.Printf("http server failed, err:%v\n", err)
return
}
}
自定义Server
要管理服务端的行为,可以创建一个自定义的Server:
s := &http.Server{
Addr: ":8080",
Handler: myHandler,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())
本文主要探讨Go语言内置的net/http包在服务端的实现,包括如何接收GET和POST请求,以及如何使用默认和自定义Server。
2万+

被折叠的 条评论
为什么被折叠?



