On Mon, Apr 22, 2024 at 2:25 PM Jochen Voss <jochen.v...@gmail.com> wrote: > > Using generics, can I somehow write a constraint which says that *T (instead > of T) implements a certain interface? The following code illustrated what > I'm trying to do: > > type A int > > func (a *A) Set(x int) { > *a = A(x) > } > > type B string > > func (b *B) Set(x int) { > *b = B(strconv.Itoa(x)) > } > > type C1 struct { > Val []A > } > > func (c *C1) Set(v int) { > for i := range c.Val { > c.Val[i].Set(v) > } > } > > type C2 struct { > Val []B > } > > func (c *C2) Set(v int) { > for i := range c.Val { > c.Val[i].Set(v) > } > } > > I would like to use generics to use a single definition for the methods which > here are func (c *C1) Set(v int) and func (c *C2) Set(v int). (My real code > has many base types, instead of just A and B.) How can I do this? > > I tried the naive approach: > > type C[T interface{ Set(int) }] struct { > Val []T > } > > but when I try to use the type C[A] now, I get the error message "A does not > satisfy interface{Set(int)} (method Set has pointer receiver)".
type C[P interface { *E Set(int) }, E any] struct { Val []P } 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/CAOyqgcXSqw6JOmNrjyJ1KWn9MB3p%2BDYUooC0byRP%2BqB0x7jpHg%40mail.gmail.com.