go / expert
Snippet
Generische Middleware-Komposition mit variadischen Dekorator-Funktionen
Generische variadische Funktionen ermöglichen typsichere funktionale Komposition ohne Laufzeit-Overhead durch Interface-Typbehauptungen. Die Funktion Compose faltet Dekorator-Closures von rechts nach links und baut so einen sauber geschichteten Middleware-Pipeline-Ausführungsbaum auf.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package mainimport "fmt"type Handler[T any] func(T) Ttype Decorator[T any] func(Handler[T]) Handler[T]func Compose[T any](decorators ...Decorator[T]) Decorator[T] {return func(final Handler[T]) Handler[T] {for i := len(decorators) - 1; i >= 0; i-- {final = decorators[i](final)}return final}}func main() {logDec := func(next Handler[int]) Handler[int] {return func(val int) int {fmt.Println("Before execution:", val)res := next(val)fmt.Println("After execution:", res)return res}}doubleDec := func(next Handler[int]) Handler[int] {return func(val int) int { return next(val * 2) }}pipeline := Compose(logDec, doubleDec)(func(v int) int {return v + 10})fmt.Println("Final Output:", pipeline(5))}
Erklärung
1
for i := len(decorators) - 1; i >= 0; i-- {
Iteriert in umgekehrter Reihenfolge durch Dekoratoren, um sicherzustellen, dass äußere Dekoratoren innere Dekoratoren korrekt umhüllen.