No, that pre-generics case is not sufficient for my use-case.  

For my use-case I need to be able to use other types besides []Suiter such 
as []int, e.g.:

var n []int
n = Append(n, 1)
n = Append(n, 2)
n = Append(n, 3)
n = Append(n, 4)
for _, i := range n {
fmt.Printf("Int: %d\n", i)
}

See full code in playground <https://goplay.tools/snippet/FwSn1BaWg7k>.
On Saturday, October 21, 2023 at 3:15:03 PM UTC-4 Dan Kortschak wrote:

> On Sat, 2023-10-21 at 11:58 -0700, Mike Schinkel wrote:
> > Recently I was trying to write a func using generics where I wanted
> > to use a slice of an interface that would contain implementers of
> > that interface and then pass those types to a generic function, but I
> > ran into this error:
> > 
> > type MyStruct of MySlice{} does not match inferred type MyInterface
> > for T
> > 
> > My code is complex so I wrote the simplest example for this email and
> > here is part of that code:
> > 
> > type Suiter interface {
> >     Suit()
> > }
> > func Append[T any](s []T, i T) []T {
> >     return append(s, i)
> > }
> > func main() {
> >     var s []Suiter
> > 
> >     //CAN GENERICS SUPPORT THIS?
> >     //s = Append(s, Clubs{})
> >     //s = Append(s, Hearts{})
> >     //s = Append(s, Diamonds{})
> >     //s = Append(s, Spades{})
> > 
> >     //VERSUS HAVING TO DO THIS?
> >     s = Append(s, Suiter(Clubs{}))
> >     s = Append(s, Suiter(Hearts{}))
> >     s = Append(s, Suiter(Diamonds{}))
> >     s = Append(s, Suiter(Spades{}))
> > 
> >     for _, suit := range s {
> >         fmt.Printf("Suit: %s\n", suitName(suit))
> >     }
> > }
> > The full code is here in a playground.
> > 
> > Note: My example func Append() makes no sense in real use, I only use
> > it as it should be an easily understood example to show the syntax I
> > am trying to illustrate.
> > 
> > Question: Is there a way to write Append() such that I can call
> > Append(s, Clubs{}) instead of having to write Append(s,
> > Suiter(Clubs{}))?
> > 
> > And if no, is there a chance that in the future Go generics will be
> > able to support that level of type inference?
> > 
>
> The pre-generics language handles this case:
> https://go.dev/play/p/jaJF7LTSVYe
>
> Is there something about your real case that makes this not acceptable?
>
>

-- 
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/805dbd4a-e2a0-426e-b61f-45b9333803f5n%40googlegroups.com.

Reply via email to