Skip to content

Instantly share code, notes, and snippets.

@alok87
Created November 8, 2021 13:36
Show Gist options
  • Save alok87/cc452da278e0e1b9c0950249b82b48a0 to your computer and use it in GitHub Desktop.
Save alok87/cc452da278e0e1b9c0950249b82b48a0 to your computer and use it in GitHub Desktop.
golang middleware example https://play.golang.org/p/1Rcyps1TRwO
package main
import (
"fmt"
)
type Service interface {
Do()
}
type service struct {}
func (s service) Do() {
fmt.Println("service.Do()")
}
type metricMiddleware struct {
name string
next Service
}
func (m metricMiddleware) Do() {
fmt.Printf("metricMiddleware.Do(), metric: %s\n", m.name) // the middleware injected
m.next.Do()
}
type traceMiddleware struct {
name string
next Service
}
func (t traceMiddleware) Do() {
fmt.Printf("traceMiddleware.Do(), trace: %s\n", t.name) // the middleware injected
t.next.Do()
}
func main() {
var s Service
s = service{}
s = metricMiddleware{"request_count", s}
s = traceMiddleware{"request", s}
s.Do()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment