It allows to return the value pointed at (*Element) but I still don't have 
access to the *Element field adddress of let's say var d Div so can't 
change d.Element to swap it with another value. (by taking Ref(&d,e) where 
e is some *Element)

It's usable as a constraint but that's not sufficient.


On Thursday, April 4, 2024 at 6:53:27 AM UTC+2 Axel Wagner wrote:

> How does `interface{ AsElement() *Element }` not do exactly what you want?
>
> On Thu, Apr 4, 2024 at 4:14 AM atd...@gmail.com <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...@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
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/f2150cf5-75d9-4cb3-9a29-d5a8c8e655a5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/d7c72c15-7223-4a4b-8306-5a83550f19e8n%40googlegroups.com.

Reply via email to