• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言http包简易入门

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

说道go语言web编程,必不可少的会使用到net/http包。go语言将web开发需要使用到的很多内容都放在了标准库中——net/http。

如何写一个简单的web程序很容易。如下:

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "net/http"
 6 )
 7 
 8 func hello(w http.ResponseWriter, r *http.Request) {
 9     fmt.Fprintf(w, "hello")
10 }
11 
12 func main() {
13     server := &http.Server{
14         Addr: "0.0.0.0:8080",
15     }
16     http.HandleFunc("/hello", hello)
17     server.ListenAndServe()
18 }

其中使用了http包。使用http.HandleFunc就是使用了一个处理器函数。
处理器函数是一个签名和ServeHTTP方法相同的函数,Go语言中,有一种HandlerFunc函数类型,可以加将这个函数转化为带有方法的处理器(Handler)?

ServerMux是一个路由管理器,也可以说是一个多路复用器,使用方式如下:

 1 package main
 2 import (
 3     "fmt"
 4     "net/http"
 5 )
 6 func main() {
 7     servermux := http.NewServeMux()
 8     servermux.HandleFunc("/hello", hello)
 9     server := &http.Server{
10         Addr: ":8080",
11         Handler: servermux,
12     }
13     server.ListenAndServe()
14 }
15 func hello(w http.ResponseWriter, r *http.Request) {
16     fmt.Fprintln(w, "hello world")
17 }

其实是在使用http.HandleFunc的时候,调用了

1 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
2     DefaultServeMux.HandleFunc(pattern, handler)
3 }

这样的话,其实是使用了一个变量DefaultServeMux,再看看这个变量的内容:

1 var DefaultServeMux = &defaultServeMux
2 var defaultServeMux ServeMux

这个变量其实就是ServeMux的实例。也就是ServeMux,所以在使用http的handerfunc的时候,是使用了这个多路复用器的。这个处理器也是默认的处理器。如果没有声明或者直接使用其他的处理器的时候,调用处理器函数和处理器都是使用了这个。

 

接下来看HandleFunc这个函数,以上使用的http包的函数HandleFunc最终调用的是ServeMux的HandleFunc。所以在使用的时候Handle和HandleFunc完全一致。

type HandlerFunc func(ResponseWriter, *Request)

HandleFunc最终会将函数转成HandleFunc,等同于Handler,Handler是一个接口,如下:

1 type Handler interface {
2     ServeHTTP(ResponseWriter, *Request)
3 }

所以其实这两种类型是等价的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何使用Docker部署GoWeb应用发布时间:2022-07-10
下一篇:
goslice详解发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap