type myHandler struct{}
func main() {
http.HandleFunc("/", Hello) //没有指定路由则匹配到根路由
http.HandleFunc("/bye", Saybye) //不能带括号
mymux := http.NewServeMux() //创建一个handlefunc的底层结构
mymux.Handle("/myhandle", &myHandler{}) //有handle和handlefunc,http.handlefunc底层就是servermux.handlefunc
//传入一个handle
log.Println("服务开始运行")
//创建自己的服务,listenandserve的底层也是多封装了一层
myserve := &http.Server{
Addr: ":4000",
}
myserve.Handler = mymux
//log.Fatal(myserve.ListenAndServe())
log.Fatal(http.ListenAndServe(":4001", nil))
//第二个参数也是handle,如果不传则myhandle路由不生效,传了则根路由和bye路由不生效
//将根路由和bye路由绑定的http换成mymux则全部生效
}
func (*myHandler) ServeHTTP(w http.ResponseWriter, s *http.Request) { //为Myhandle绑定一个方法
w.Write([]byte("这是调用底层创建http服务的第二种方法 url:" + s.URL.String()))
}
func Hello(w http.ResponseWriter, s *http.Request) {
w.Write([]byte("你好,golang,第一种路由写法 Hello url:" + s.URL.String()))
}
func Saybye(w http.ResponseWriter, s *http.Request) {
w.Write([]byte("第一种路由写法 Saybye url:" + s.URL.String()))
}
原文链接:初窥http服务器-GOLANG
有疑问加站长微信联系(非本文作者)