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.