Pass common object to nested structs

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)