NatsIO which is a pretty major application has this https://www.javadoc.io/doc/io.nats/jnats/2.0.0/io/nats/client/Options.Builder.html
This is a pretty good “tutorial” - and I think you can see how it can be applied to parameters or instance creation (e.g. the server instance). see https://vaskoz.wordpress.com/2014/04/07/golang-builder-pattern/ > On May 29, 2020, at 5:02 PM, roger peppe <rogpe...@gmail.com> wrote: > > I'm not familiar with the Builder pattern. Could you provide a good example > of its use in a Go package? > > On Mon, 25 May 2020, 06:25 robert engels, <reng...@ix.netcom.com > <mailto:reng...@ix.netcom.com>> wrote: > I think the Builder pattern is easier than this, and it retains the property > of both ‘config struct’ and ‘multiple args’ versions that the implementation > can re-order and validate option in aggregate easier - but most of all is > doesn’t pollute that package with top-level public functions. The builder > pattern uses instance methods to tie the function to the configuration > structure, > >> On May 24, 2020, at 11:36 PM, Amarjeet Anand <amarjeetanandsi...@gmail.com >> <mailto:amarjeetanandsi...@gmail.com>> wrote: >> >> Thanks James for your response and the amazing posts. >> >> On Mon, May 25, 2020 at 9:01 AM James <proglot...@gmail.com >> <mailto:proglot...@gmail.com>> wrote: >> This reminds me of functional options which I think are used quite widely >> for this purpose. >> >> See https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis >> <https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis> >> and >> https://github.com/tmrts/go-patterns/blob/master/idiom/functional-options.md >> <https://github.com/tmrts/go-patterns/blob/master/idiom/functional-options.md> >> On Mon, 25 May 2020 at 14:57, Amarjeet Anand <amarjeetanandsi...@gmail.com >> <mailto:amarjeetanandsi...@gmail.com>> wrote: >> Is it acceptable to make the optional parameter as varargs? >> I wrote code in my package like ... >> >> >> package backoff >> >> func New(options ...Options) *backOff { >> backOff := defaultBackOff() >> if len(options) == 0 { >> return backOff >> } >> >> // override default values >> if len(options) > 1 { >> panic("only 1 backOffOption allowed") >> } >> optn := options[0] >> backOff.options = &optn >> >> if optn.Delay_ms > 0 { >> backOff.delay_ms = optn.Delay_ms >> } >> return backOff >> } >> >> >> So that in other package, it can be used as backoff.New() when option is not >> needed(which will be the case most of the time). >> >> Is using varargs for optional parameter is ok? Or am I abusing the Variadic >> Functions feature? >> >> >> >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com >> <mailto:golang-nuts+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/CANFuhy8nhhbBDWb0%3D7SLvq1aictC9GVG%3D9zpfpJ1gevDdRmd6A%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/golang-nuts/CANFuhy8nhhbBDWb0%3D7SLvq1aictC9GVG%3D9zpfpJ1gevDdRmd6A%40mail.gmail.com?utm_medium=email&utm_source=footer>. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com >> <mailto:golang-nuts+unsubscr...@googlegroups.com>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/CANFuhy9Aj%2Bo7M-%3Dstro5aXbjPTnCZ0y_4vYE3CAjDiBpCUhjpw%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/golang-nuts/CANFuhy9Aj%2Bo7M-%3Dstro5aXbjPTnCZ0y_4vYE3CAjDiBpCUhjpw%40mail.gmail.com?utm_medium=email&utm_source=footer>. > > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/67D5D073-044A-4274-9DF4-EE786F08AD65%40ix.netcom.com > > <https://groups.google.com/d/msgid/golang-nuts/67D5D073-044A-4274-9DF4-EE786F08AD65%40ix.netcom.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CEC83E98-7E8C-4B01-AD72-565554DFE6A3%40ix.netcom.com.