Golang Web基础

it2022-05-05  153

Web服务器的底层原理,在前面的linux C编程中已经涉及到。

Go语言直接封装了相应的实现,所以可以很容易的起一个Web服务器。

package main import ( "io" "log" "net/http" ) func sayHello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world, this is version 1") } func main() { // 设置路由 http.HandleFunc("/", sayHello) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } }

这里隐藏一个默认的控制器

package main import ( "io" "log" "net/http" ) type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "URL: "+r.URL.String()) } func sayHello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world, this is version 2") } func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/hello", sayHello) err := http.ListenAndServe(":8080", mux) if err != nil { log.Fatal(err) } }

最底层的封装

package main import ( "io" "log" "net/http" "time" ) type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "URL: "+r.URL.String()) if h, ok := mux[r.URL.String()]; ok { h(w, r) return } } func sayHello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world, this is version 3") } func sayBye(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Bye Bye, this is version 3") } var mux map[string]func(http.ResponseWriter, *http.Request) func main() { server := http.Server{ Addr: ":8080", Handler: &myHandler{}, ReadTimeout: 5 * time.Second, } mux = make(map[string]func(http.ResponseWriter, *http.Request)) mux["/hello"] = sayHello mux["/bye"] = sayBye err := server.ListenAndServe() if err != nil { log.Fatal(err) } }

 


最新回复(0)