Go 提供了一系列用于创建 Web 服务器的标准库,而且通过 Go 创建一个服务器的步骤非常简单,只要通过 net/http 包调用ListenAndServe
函数并传入网络地址以及负责处理请求的处理器( handler )作为参数就可以了。如果网络地址参数为空字符串,那么服务器默认使用 80 端口进行网络连接;如果处理器参数为 nil,那么服务器将使用默认的多路复用器 DefaultServeMux,当然,我们也可以通过调用 NewServeMux 函数创建一个多路复用器。多路复用器接收到用户的请求之后根据请求的 URL 来判断使用哪个处理器来处理请求,找到后就会重定向到对应的处理器来处理请求,
1)使用处理器函数处理请求
package main
import (
"fmt"
"net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r * http.Request) {
fmt.Fprintln(w, "正在通过处理器函数处理你的请求")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
a) HandleFunc 方法的说明
b) 处理器函数的实现原理:
2) 使用处理器处理请求
package main
import (
"fmt"
"net/http"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
http.Request) {
fmt.Fprintln(w, "正在通过处理器处理你的请求")
}
func main() {
myHandler: = MyHandler {}
//调用处理器
http.Handle("/", & myHandler)
http.ListenAndServe(":8080", nil)
}
i. Handle 方法的说明
ii. 关于处理器 Handler 的说明
也就是说只要某个结构体实现了 Handler 接口中的 ServeHTTP 方法那么它就是一个处理器
iii. 我们还可以通过 Server 结构对服务器进行更详细的配置
package main
import (
"fmt"
"net/http"
"time"
)
type MyHandler struct {}
func(h * MyHandler) ServeHTTP(w http.ResponseWriter, r *
http.Request) {
fmt.Fprintln(w, "测试通过 Server 结构详细配置服务
器 ")
}
func main() {
myHandler: = MyHandler {}
//通过 Server 结构对服务器进行更详细的配置
server: = http.Server {
Addr: ":8080",
Handler: & myHandler,
ReadTimeout: 2 * time.Second,
}
server.ListenAndServe()
}
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r * http.Request) {
fmt.Fprintln(w, "通过自己创建的多路复用器来处理请求")
}
func main() {
mux: = http.NewServeMux()
mux.HandleFunc("/myMux", handler)
http.ListenAndServe(":8080", mux)
}
结构体 ServeMux
结构体 ServeMux 的相关方法