```
type WithSharedOption interface {
   SomeMethod()
}

type OptionA struct {
}

func (a OptionA) SomeMethod(){}

type OptionB struct {
}

func (b OptionB) SomeMethod(){}

//without generics
func WithShared(option WithSharedOption){}
func WithANotShared(option OptionA){}

//with generics
func WithShared[T WithSharedOption](option T){}
func WithANotShared(option OptionA){}
```

On Thursday, July 28, 2022 at 6:12:16 AM UTC+7 John wrote:

> As a note, this is how I solve this problem without generics:
>
> https://go.dev/play/p/nsDca0McADY
>
> On Wednesday, July 27, 2022 at 2:54:20 PM UTC-7 John wrote:
>
>> With 1.18 generics, I'm curious if anyone has a good solution using 
>> generics to solve the optional argument that can be used in multiple method 
>> problem.
>>
>> So say I have two methods, .A() and .B().  Both accept optional arguments 
>> where some optional arguments might be shared.
>>
>> Here is a very loose (do not take any of this as the solution, just 
>> trying to show what I'm kinda trying to achieve). 
>>
>> type AOptions struct{
>>   Shared Opt string
>>   NotSharedOpt bool
>> }
>>
>> type BOptions struct{
>>   Shared Opt string
>>   NotSharedOpt int
>> }
>>
>> func WithShared(shared string) CallOption {
>>   ...
>> }
>>
>> func WithANotShared(b bool) CallOption {
>>   ...
>> }
>>
>> func (c Client) A(options ...CallOption) {
>>   opts := AOptions{}
>>   for _, o := range options {
>>     o(&opts)
>>   }
>>   ... 
>> }
>> func (c Client B(options ...CalOption) {
>>   ...
>> }
>>
>> We want to be able to use WithShared() with both A() and B(), but only  
>> WithANotShared with the A() method.  
>>
>> I've had different solutions to this problem that would give runtime 
>> errors, but I'm curious with generics if there is one for compile time that 
>> anyone has come up with.
>>
>> Cheers.
>>
>

-- 
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/cde5c2a3-996f-40cb-b9d6-b5941ecbaf5dn%40googlegroups.com.

Reply via email to