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() }