$ go run main.go
Called middleware03()
Called middleware02()
Called middleware01()
Called initial()
Last active
November 28, 2020 04:06
-
-
Save magnetikonline/0b26671cc72b81fd2f3b8923cbe3cf57 to your computer and use it in GitHub Desktop.
Golang net/http middleware flow.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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