Hi fellow Gophers Unfortunately, I have another generics question that is truly driving me nuts. Why does the below snippet not compile:
https://go.dev/play/p/rf-EtF7hMdw with the error message: ``` ./prog.go:27:9: cannot use &ASet{} (value of type *ASet) as Set[T] value in return statement: *ASet does not implement Set[T] (wrong type for method NewElement) have NewElement() A want NewElement() T ``` I'd assume `*ASet` obviously satisfy the `Set` interface. Many thanks in advance. p.s. Robert, the Field1, Field2, ... are just different failed approaches I tried. Luckily, Axel showed me the solution. I thought everything went well until I hit this problem... ``` package main import "fmt" type A struct{ F int } type ASet struct{} func (s *ASet) NewElement() A { return A{F: 5} } type B struct{ F float64 } type BSet struct{} func (s *BSet) NewElement() B { return B{F: 3.14} } type Set[T A | B] interface { NewElement() T } // This function definition does not work. Why?! func NewSet[T A]() Set[T] { return &ASet{} } func main() { s := NewSet[A]() fmt.Println(s) } ``` On Sunday, December 28, 2025 at 12:49:45 AM UTC+8 Robert Engels wrote: > > Field1 and Field2 are unused in your example. What is the purpose? > > On Dec 25, 2025, at 3:59 AM, 'Axel Wagner' via golang-nuts < > [email protected]> wrote: > > > https://go.dev/play/p/KV75rDOwIn2 > > On Thu, 25 Dec 2025 at 10:03, [email protected] <[email protected]> wrote: > >> Hi fellow Gophers >> >> I am trying to define an interface that satisfies addition (ultimate goal >> is to define a field <https://en.wikipedia.org/wiki/Field_(mathematics)> >> ). >> However, I could get the following code to compile: >> >> https://go.dev/play/p/zIwo1KW_Un0 >> >> no matter what approach I use (types Field0, Field1, Field2). >> The compiler error is of the pattern: >> >> ``` >> ./prog.go:29:22: *big.Rat does not satisfy Field0[any] (wrong type for >> method Add) have Add(*big.Rat, *big.Rat) *big.Rat want Add(any, any) any >> ``` >> >> I took the first approach from this recent post >> <https://go.dev/blog/generic-interfaces> on generics. >> If anyone could point to a correct way to make these kinds of >> self-referencing definitions would be much appreciated. >> >> Thanks >> >> ``` >> package main >> >> import ( >> "fmt" >> "math/big" >> ) >> >> type Field0[T any] interface { >> Add(T, T) T >> } >> >> type Field1[T any] interface { >> Add(Field1[T], Field1[T]) Field1[T] >> } >> >> type Field2 interface { >> Add(Field2, Field2) Field2 >> } >> >> type PolynomialTerm[K Field0[any]] struct { >> Coefficient K >> Monomial []byte >> } >> >> func main() { >> c := big.NewRat(0, 1) >> >> // This line doesn't compile no matter what Field we choose in >> PolynomialTerm's definition. >> t := PolynomialTerm[*big.Rat]{Coefficient: c} >> >> fmt.Println(t) >> } >> ``` >> >> -- >> 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 visit >> https://groups.google.com/d/msgid/golang-nuts/905e4f95-737f-48cb-bf9b-66e94e31e521n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/905e4f95-737f-48cb-bf9b-66e94e31e521n%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 [email protected]. > > To view this discussion visit > https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFiayZh_3RcbU0iCTsJ3AFNGeykV4MqRKKm%2B%3D2%2BbymBPw%40mail.gmail.com > > <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFiayZh_3RcbU0iCTsJ3AFNGeykV4MqRKKm%2B%3D2%2BbymBPw%40mail.gmail.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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/fdc7366e-30ae-470a-866f-b856492090b6n%40googlegroups.com.
