Thank you Axel for this educative solution, much appreciated. On Thursday, December 25, 2025 at 5:59:34 PM UTC+8 Axel Wagner 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/01cfbbcc-c7d6-48de-886c-21a445e55941n%40googlegroups.com.
