简单的计时器

func timer(fn func()) func() {
	return func() {
		startTime := time.Now().Unix()
		fn()
		endTime := time.Now().Unix()
		fmt.Println("运行时间:", endTime-startTime)
	}
}

func testFunc() {
	fmt.Println("运行 testFunc")
	time.Sleep(time.Second * 2)
}

func main() {
	timer(testFunc)()
}

项目中认证实现

type DecoratorHandler func(http.HandlerFunc) http.HandlerFunc

func MiddlewareHandlerFunc(hp http.HandlerFunc, decors ...DecoratorHandler) http.HandlerFunc {
	for _,fn := range decors {
		dp := fn
		hp = dp(hp)    // dp(hp) => VerifyHeader(Pong)
	}
	return hp
}

func VerifyHeader(h http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		token := r.URL.Query().Get("token")
		if token == "" {
			fmt.Fprintf(w,r.URL.Path +" VerifyHeader:token不能为空")
			return
		}
		h(w,r)
	}
}

func VerifyHeader2(h http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		token := r.URL.Query().Get("token")
		if token != "mimi" {
			fmt.Fprintf(w,r.URL.Path +" VerifyHeader:token必须为:mimi")
			return
		}
		h(w,r)
	}
}

func Pong(w http.ResponseWriter, r *http.Request)  {
	fmt.Fprintf(w,r.URL.Path +"--> 验证通过,返回数据")
	return
}

func main()  {
	// http://127.0.0.1:8080/test?token=mimi
	http.HandleFunc("/test",MiddlewareHandlerFunc(Pong, VerifyHeader, VerifyHeader2))
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}