在Golang中使用HTTP协议进行网络编程很简单,主要使用net/http包。
例如:
HTTP服务端:
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
})
http.ListenAndServe(":8000", nil)
HTTP客户端:
resp, err := http.Get("http://127.0.0.1:8000/hello")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
更复杂的HTTP服务可以通过net/http的Handler接口实现:
<!-- wp:paragraph -->
<p>type Handler struct{}</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {<br>w.Write([]byte("Hello, World!"))<br>}</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>http.ListenAndServe(":8000", new(Handler))</p>
<!-- /wp:paragraph -->
也可以使用第三方路由库实现复杂路由:
mux := http.NewServeMux()
mux.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
})
http.ListenAndServe(":8000", mux)
Golang实现HTTP服务主要涉及以下几个方面:
- 注册路由及对应的处理函数http.HandleFunc
- 编写处理函数,并通过http.ResponseWriter返回响应
- 启动HTTP服务http.ListenAndServe
- 客户端发起请求http.Get并得到响应
- 编写复杂路由使用ServeMux或其他第三方库
- 实现Handler接口自定义处理逻辑
通过良好的接口设计和简洁的API,Golang实现HTTP编程效率非常高,这也是Golang作为服务端编程语言的优点之一。理解Golang net/http包的使用就可以轻易实现HTTP应用开发。