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)".
Many thanks,
Jochen
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/e6c1647a-9ade-496e-85b5-0e96563b5e22n%40googlegroups.com.