From ecaab6416eec5ca32046d71fd6b36074348b7ae5 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Fri, 5 Jan 2024 22:14:20 +0100 Subject: [PATCH] Chaining --- chaining/Makefile | 2 ++ chaining/go.mod | 3 +++ chaining/main.go | 53 ++++++++++++++++++++++++++++++++++++++++++ config_pattern/main.go | 2 +- 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 chaining/Makefile create mode 100644 chaining/go.mod create mode 100644 chaining/main.go diff --git a/chaining/Makefile b/chaining/Makefile new file mode 100644 index 0000000..860613c --- /dev/null +++ b/chaining/Makefile @@ -0,0 +1,2 @@ +run: + @go run main.go \ No newline at end of file diff --git a/chaining/go.mod b/chaining/go.mod new file mode 100644 index 0000000..c0f0ec5 --- /dev/null +++ b/chaining/go.mod @@ -0,0 +1,3 @@ +module patterns + +go 1.21.5 diff --git a/chaining/main.go b/chaining/main.go new file mode 100644 index 0000000..3704219 --- /dev/null +++ b/chaining/main.go @@ -0,0 +1,53 @@ +package main + +import "fmt" + +type Filter struct { + alive *bool + id *int + externalId *string +} + +func NewFilter() *Filter { + return &Filter{} +} + +func (f *Filter) Dump() { + fmt.Println("Filter non-nil options:") + if f.alive != nil { + fmt.Printf(" Alive: %v\n", *f.alive) + } + if f.id != nil { + fmt.Printf(" Id: %v\n", *f.id) + } + if f.externalId != nil { + fmt.Printf(" ExternalId: %v\n", *f.externalId) + } +} + +func (f *Filter) Alive(alive bool) *Filter { + f.alive = &alive + return f +} + +func (f *Filter) Id(id int) *Filter { + f.id = &id + return f +} + +func (f *Filter) ExternalId(externalId string) *Filter { + f.externalId = &externalId + return f +} + +func main() { + var f *Filter + + f = NewFilter().ExternalId("some-external-id") + f.Dump() + + fmt.Println("-------------------") + + f = NewFilter().Id(123).Alive(true).ExternalId("some-external-id") + f.Dump() +} diff --git a/config_pattern/main.go b/config_pattern/main.go index b4a9ad1..e7f13dd 100644 --- a/config_pattern/main.go +++ b/config_pattern/main.go @@ -54,7 +54,7 @@ func NewFilter(opts ...SetFilterFunc) *Filter { func main() { var f *Filter - f = NewFilter() + f = NewFilter(WithExternalId("some-external-id")) f.Dump() fmt.Println("-------------------")