Go web Handle
Go web Handle
Web Server
创建web server
http
1
2
3
// func ListenAndServe(addr string, handler Handler) error
// handler == http.DefaultServeMux if nil
http.ListenAndServe("localhost:8080", nil)
1
2
3
4
5
6
7
// 配置server
server := http.Server{
Addr: "localhost:8080",
Handler: nil, // http.DefaultServeMux if nil
// ... other
}
server.ListenAndServe()
https
- go中的https使用的是http2
http.ListenAndServeTSL() server.ListenAndServeTSL()
Handler
- is an interface
1 2 3
type Handler interface { ServeHTTP(ResponseWriter, *Request) }
多Handler
http.Handle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type HelloHandle struct{}
// Handler interface
func (h *HelloHandle) ServeHTTP(w http.ResponseWriter, r *http.Request){
w.Write([]byte("hello"))
}
mh := HelloHandle{}
server := http.Server{
Addr: "localhost:8080",
Handler: nil,
}
// 注册mh到DefaultServeMux
http.Handle("/hello", &mh)
server.ListenAndServe()
http.HandleFunc
1
2
3
4
5
6
7
8
9
10
11
12
13
// 1.
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello"))
})
// 2.
func MyHandleFun(w http.ResponseWriter, r *http.Request){
// do something
}
http.HandleFunc("/my", MyHandleFun)
// 3.
// type HandlerFunc func(ResponseWriter, *Request)
// 使用http.Handle和http.HandlerFunc(类型转换)等价于http.HandleFunc
http.Handle("/path", http.HandlerFunc(MyHandleFun))
内置Handler
- http.NotFoundHandler
- func NotFoundHandler() Handler
- 404 page not found
- func NotFoundHandler() Handler
- http.RedirectHandler
- func RedirectHandler(url string, code int) Handler
- url: 要跳转到的URL; code: 3xx
- func RedirectHandler(url string, code int) Handler
- http.StripPrefix
- func StripPrefix(prefix string, h Handler) Handler
- 前缀不匹配则返回404
- 从请求URL中去掉prefix, 然后调用h这个Handler
- func StripPrefix(prefix string, h Handler) Handler
- http.TimeoutHandler
- func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler
- 在dt时间内运行h这个Handler, 如果超时返回msg
- func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler
- http.FileServer
- func FileServer(root FileSystem) Handler
- 基于root这个文件系统来响应请求
- func FileServer(root FileSystem) Handler
FileSystem
- 快捷实现一个静态文件服务器
1 2 3 4 5 6
type FileSystem interface { Open(name string) (File, error) } // Dir就是一个文件系统 type Dir string func (d Dir) Open(name string) (File, error)
This post is licensed under CC BY 4.0 by the author.