Might have come across this today as I was trying to simplify some code.

Basically, I have a base type called *Element that has a method AsElement() 
*Element that returns itself.

And this base element is used as a base for many others, for isntance:

type Div struct{ *Element}
type Span struct{*Element}
type Anchor {*Element}
...

Somehow, I need a function Ref that can take a pointer to any of these 
elements and modify them (basically modifying the inner *Element pointer).

Currently, I don't think I can abstract over these types which share in 
common the *Element field and the AsEleemnt method promoted from it.
I don't want to have to implement a specific method to do that mutation 
operation for each and every one of these types either.

Basically, trying to make generic this function:

func Ref(vref **Element) func(*Element) *Element{
return func(e *Element)*Element{
*vref = e
return e
}
}


Or does anyone see something that I missed?

On Thursday, April 4, 2024 at 2:52:16 AM UTC+2 Adam Manwaring wrote:

> While this would make some things much easier for me, it seems this would 
> be a pretty fundamental change. Constraints are essentially interfaces and 
> interfaces in Go are defined by behaviors. Structs, on the other hand, are 
> defined by properties. There is no behavior that all structs have that 
> every other type couldn't also have. Thus having a struct constraint would 
> be a one-off exception which for the most part seems anathema to Go. In a 
> similar vein, there are many times I'd like an interface to require certain 
> exported properties in addition to behaviors, but this isn't going to 
> happen.
>
> On Wednesday, March 27, 2024 at 6:28:19 PM UTC-6 Makis Maropoulos wrote:
>
>> Same here @Abraham, 
>>
>>     ResponseType interface {
>>         ~struct{}
>>     }
>>
>> Obviously this doesn't work, I would love to see it working though.
>> On Wednesday 14 September 2022 at 17:48:19 UTC+3 Abraham wrote:
>>
>>> I am glad I found this thread because I was just now breaking my head 
>>> figuring out why my <struct constraint> was not working....
>>>
>>> On Wednesday, May 18, 2022 at 10:41:29 PM UTC-4 Ian Lance Taylor wrote:
>>>
>>>> On Wed, May 18, 2022 at 7:36 PM Jeremy Kassis <jka...@gmail.com> 
>>>> wrote: 
>>>> > 
>>>> > Where exactly did this land? Seems like an important conversation... 
>>>>
>>>> To date there is no way to write a constraint that requires that a 
>>>> type argument be a struct type. 
>>>>
>>>>
>>>> > ``` 
>>>> > // RPCHandler passes RPCReq and RPCRes as fn args 
>>>> > func RPCHandler[T RPCReq, S RPCRes](fn func(T, S)) http.HandlerFunc { 
>>>> > return func(w http.ResponseWriter, r *http.Request) { 
>>>> > req := T{} 
>>>> > if err := reqBodyReadAll(w, r, &req); err != nil { 
>>>> > resWriteErr(w, err) 
>>>> > return 
>>>> > } 
>>>> > res := S{} 
>>>> > fn(req, res) 
>>>> > resWriteAll(w, r, res) 
>>>> > } 
>>>> > } 
>>>> > ``` 
>>>>
>>>> I would write simply "var req T" and "var res S". 
>>>>
>>>> Ian 
>>>>
>>>

-- 
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/f2150cf5-75d9-4cb3-9a29-d5a8c8e655a5n%40googlegroups.com.

Reply via email to