Skip to content

Instantly share code, notes, and snippets.

@magnetikonline
Last active November 28, 2020 04:06
Show Gist options
  • Save magnetikonline/0b26671cc72b81fd2f3b8923cbe3cf57 to your computer and use it in GitHub Desktop.
Save magnetikonline/0b26671cc72b81fd2f3b8923cbe3cf57 to your computer and use it in GitHub Desktop.
Golang net/http middleware flow.

Golang net/http middleware flow

$ go run main.go
Called middleware03()
Called middleware02()
Called middleware01()
Called initial()
package main
import "fmt"
type Handler interface {
ServeHTTP(writer, request string)
}
type HandlerFunc func(writer, request string)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(writer, request string) {
f(writer, request)
}
func initial() Handler {
f := func(writer, request string) {
fmt.Println("Called initial()")
}
return HandlerFunc(f)
}
func middleware01() func(Handler) Handler {
return func(next Handler) Handler {
f := func(writer, request string) {
fmt.Println("Called middleware01()")
next.ServeHTTP("", "")
}
return HandlerFunc(f)
}
}
func middleware02() func(Handler) Handler {
return func(next Handler) Handler {
f := func(writer, request string) {
fmt.Println("Called middleware02()")
next.ServeHTTP("", "")
}
return HandlerFunc(f)
}
}
func middleware03() func(Handler) Handler {
return func(next Handler) Handler {
f := func(writer, request string) {
fmt.Println("Called middleware03()")
next.ServeHTTP("", "")
}
return HandlerFunc(f)
}
}
func execHTTP(h Handler) {
h.ServeHTTP("", "")
}
func main() {
h := initial()
h = middleware01()(h)
h = middleware02()(h)
h = middleware03()(h)
execHTTP(h)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment