在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
说道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就是使用了一个处理器函数。 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 } 所以其实这两种类型是等价的。 |
请发表评论