1、net.http
第一个版本
package main
import (
"io"
"log"
"net/http"
)
func main() {
// 设置路由
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
io.WriteString(writer, "hello world! this is http test demo01")
})
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal(err)
}
}
第二版本
// 第二个版本
package main
import (
"io"
"log"
"net/http"
)
//type myHandler struct {
//
//}
//func (this *myHandler)ServeHTTP(writer http.ResponseWriter, request *http.Request) {
// io.WriteString(writer, "hello world! this is http test demo02\n" + request.URL.String())
//}
func main() {
mux := http.NewServeMux()
// 设置
mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
io.WriteString(writer, "hello world! this is http test demo02\n" + request.URL.String())
})
//mux.Handle("/", &myHandler{})
err := http.ListenAndServe(":8080", mux)
if err != nil {
log.Fatal(err)
}
}
第三版本 通过map调用对应的路由函数
// 第三个版本
package main
import (
"io"
"log"
"net/http"
"time"
)
type myHandler struct {
}
func (*myHandler)ServeHTTP(writer http.ResponseWriter, request *http.Request) {
if h, ok := mf[request.URL.String()]; ok {
h(writer, request)
return
}
io.WriteString(writer, "URL:" + request.URL.String())
}
func byebye(writer http.ResponseWriter, request *http.Request) {
io.WriteString(writer, "bye bye! this is http test demo03\n" + request.URL.String())
}
func love(writer http.ResponseWriter, request *http.Request) {
io.WriteString(writer, "love! this is http test demo03\n" + request.URL.String())
}
var mf map[string]func(http.ResponseWriter, *http.Request)
func main() {
server := http.Server{
Addr: ":8080",
Handler: &myHandler{},
ReadHeaderTimeout:5 * time.Second, // 5秒
}
mf = make(map[string]func(http.ResponseWriter, *http.Request))
mf["/bye"] = byebye
mf["/love"] = love
err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}