Ah, I forgot to use reflection for instance... That might be doable.

On Thursday, April 4, 2024 at 4:13:35 AM UTC+2 atd...@gmail.com wrote:

> 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/c34ebc0f-c2bf-4b59-a59d-ee3b3047bca6n%40googlegroups.com.

Reply via email to