1. // basic-middleware.go
  2. package main
  3. import (
  4. "fmt"
  5. "log"
  6. "net/http"
  7. )
  8. func logging(f http.HandlerFunc) http.HandlerFunc {
  9. return func(w http.ResponseWriter, r *http.Request) {
  10. log.Println(r.URL.Path)
  11. f(w, r)
  12. }
  13. }
  14. func foo(w http.ResponseWriter, r *http.Request) {
  15. fmt.Fprintln(w, "foo")
  16. }
  17. func bar(w http.ResponseWriter, r *http.Request) {
  18. fmt.Fprintln(w, "bar")
  19. }
  20. func main() {
  21. http.HandleFunc("/foo", logging(foo))
  22. http.HandleFunc("/bar", logging(bar))
  23. http.ListenAndServe(":8080", nil)
  24. }

参考

https://gowebexamples.com/basic-middleware/
https://chai2010.cn/advanced-go-programming-book/ch5-web/ch5-03-middleware.html
https://colobu.com/2019/08/21/decorator-pattern-pipeline-pattern-and-go-web-middlewares/