Could you clarify what you are referring to with “that”? As stated above I do indeed see the benefit of optionally passing extra options, but I don’t understand why they should be passed as functions. To me
NewFoo(1, func(ops *FooOptions) {ops.logger = logger})
is more complicated than
ops := FooOptions{logger: logger}
NewFoo(1, ops)