This commit is contained in:
Eden Kirin
2024-01-05 21:02:24 +01:00
commit 29f75f5eda
7 changed files with 126 additions and 0 deletions

2
config_pattern/Makefile Normal file
View File

@ -0,0 +1,2 @@
run:
@go run main.go

3
config_pattern/go.mod Normal file
View File

@ -0,0 +1,3 @@
module patterns
go 1.21.5

64
config_pattern/main.go Normal file
View File

@ -0,0 +1,64 @@
package main
import "fmt"
type SetFilterFunc func(options *FilterOptions)
type FilterOptions struct {
Alive *bool
Id *int
ExternalId *string
}
type Filter struct {
Options FilterOptions
}
func (f *Filter) Dump() {
if f.Options.Alive != nil {
fmt.Printf("Alive: %v\n", *f.Options.Alive)
}
if f.Options.Id != nil {
fmt.Printf("Id: %v\n", *f.Options.Id)
}
if f.Options.ExternalId != nil {
fmt.Printf("ExternalId: %v\n", *f.Options.ExternalId)
}
}
func WithAlive(options *FilterOptions) {
alive := true
options.Alive = &alive
}
func WithId(id int) SetFilterFunc {
return func(options *FilterOptions) {
options.Id = &id
}
}
func WithExternalId(externalId string) SetFilterFunc {
return func(options *FilterOptions) {
options.ExternalId = &externalId
}
}
func NewFilter(opts ...SetFilterFunc) *Filter {
f := Filter{Options: FilterOptions{}}
for _, fn := range opts {
fn(&f.Options)
}
return &f
}
func main() {
var f *Filter
f = NewFilter()
f.Dump()
fmt.Println("-------------------")
f = NewFilter(WithId(123), WithAlive, WithExternalId("some-external-id"))
f.Dump()
}