go / intermediate
Snippet
Benutzerdefinierte Funktionstypen für das Strategy-Pattern
Funktionen sind in Go 'First-Class-Citizens'. Man kann benutzerdefinierte Funktionstypen definieren, was nützlich für Muster wie Strategy oder Middleware ist, da Verhalten als Argument übergeben werden kann.
snippet.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
package mainimport "fmt"type Validator func(string) boolfunc IsEmail(s string) bool {return len(s) > 3 // Simplified logic}func ValidateInput(input string, v Validator) {if v(input) {fmt.Println("Input is valid")} else {fmt.Println("Input is invalid")}}func main() {ValidateInput("", func(s string) bool {return len(s) > 0})}
Erklärung
1
type Validator func(string) bool
Definiert einen neuen Typ 'Validator', der jede Funktion darstellt, die einen String nimmt und einen Bool zurückgibt.
2
func ValidateInput(input string, v Validator)
Eine Funktion, die einen Validator-Typ als Parameter akzeptiert.
3
func(s string) bool { ... }
Übergibt eine anonyme Funktion (Closure), die der Validator-Signatur entspricht.