Go 语言内置了 http 包提供了 HTTP 客户端和服务端的实现
通俗一点讲:Go 语言可以通过 net/http 包搭建自己的服务器处理 http 的请求
搭建服务器分为两大种方式:第一种是通过默认多路复用器 DefaultServeMux,第二种是通过新建多路复用器 NewServeMux 的方式。
默认多路复用器 DefaultServeMux 提供了 Handle、HandleFunc、Server 搭建服务器。不论哪一种都可以实现服务器的搭建。Demo 案例
Handle
package main
import (
"net/http"
"fmt"
)
type MyHandler struct {}
func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, " 通过自己创建的处理器...", r.URL.Path)
}
func main() {myHandler := MyHandler{}
http.Handle("/", &myHandler)
http.ListenAndServe(":8080", nil)
}
HandleFunc
package main
import (
"fmt"
"net/http"
)
// 创建处理器函数
func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "Hello world!", r.URL.Path)
}
func main() {http.HandleFunc("/", handler)
// 创建路由
http.ListenAndServe(":8080", nil)
}
Server 结构
package main
import (
"net/http"
"fmt"
"time"
)
type MyHandler struct {}
func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, " 通过详细 Serve 配置创建 http 服务器处理请求 ", r.URL.Path)
}
func main() {myHandler := MyHandler{}
// 创建 Serve 结构,并详细配置里面的字段
server := http.Server{
Addr: ":8080",
Handler: &myHandler,
ReadTimeout: 2 * time.Second,
}
server.ListenAndServe()}
NewServeMux
package main
import (
"net/http"
"fmt"
)
//handler
func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, " 通过 NewServeMux 创建多路复用器创建服务器处理请求!", r.URL.Path)
}
func main() {mux := http.NewServeMux()
mux.HandleFunc("/", handler)
http.ListenAndServe(":8080", mux)
}
正文完