package workerpool import ( "runtime" ) var DEFAULT_OPTIONS = &Options{ WorkerCount: 2 * runtime.NumCPU(), QueueSize: 4 * runtime.NumCPU(), } func WorkerCount(workerCount int) Option { return func(args *Options) { args.WorkerCount = workerCount } } func QueueSize(queueSize int) Option { return func(args *Options) { args.QueueSize = queueSize } } type Options struct { WorkerCount int QueueSize int } func (options Options) Override(optionalOptions ...Option) *Options { result := &options for _, option := range optionalOptions { option(result) } return result } type Option func(*Options)