Then have people pass in "Options{}" and let the zero-values imply default.
But most of the time, if you are making things complex, you're missing the whole point of golang. The innovation in golang is it's simplicity, if you miss that, then you might as well code C++ (which have more features for these kinds of things).
> type Options struct { ... }
> func myMethod(arg1 string, options Options) {...}
Then have people pass in "Options{}" and let the zero-values imply default.
But most of the time, if you are making things complex, you're missing the whole point of golang. The innovation in golang is it's simplicity, if you miss that, then you might as well code C++ (which have more features for these kinds of things).