package main
//效率最高的一个方法
import (
"fmt"
"io"
"log"
"net/http"
"os"
"strings"
"time"
)
var mux map[string]func(http.ResponseWriter, *http.Request)
func main() {
//声明一个server
server := http.Server{
Addr: ":8080", //监听端口
Handler: &handler{}, //handler
ReadTimeout: 5 * time.Second, //监听超时
}
//路由列表
mux = make(map[string]func(http.ResponseWriter, *http.Request))
mux["/hello"] = hello
//开始监听
err := server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}
type handler struct{}
func (*handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
//实现静态文件输出
if strings.Contains(r.URL.String(), "/static/") {
fmt.Println("111")
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
//此处使用.Serve.HTTP(w, r)的原因参考下面资料
http.StripPrefix("/static/", http.FileServer(http.Dir(wd))).ServeHTTP(w, r)
return
}
// 动态匹配路由
if h, ok := mux[r.URL.String()]; ok {
//匹配成功执行函数
h(w, r)
return
}
// 没有匹配成功则输出URL
io.WriteString(w, "URL:"+r.URL.String())
}
//输出hello
func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello")
}
参考资料
请发表评论