"assignable to" type constraint for generic type parameters? (re-ask)
14:58 21 Jan 2026

Consider the following (playground):

import "fmt"

type Gizmo string

func (g Gizmo) String() string { return string(g) }

func Convert(in []Gizmo) []fmt.Stringer {
    out := make([]fmt.Stringer, 0, len(in))
    for _, v := range in {
        out = append(out, v)
    }
    return out
}

Is there a way to turn Convert into a generic function like this (playground):

type AssignableTo[T any] interface {
    // magic goes here
}

func Convert[Out any, In AssignableTo[Out]](in []In) []Out {
    out := make([]Out, 0, len(in))
    for _, v := range in {
        out = append(out, v)
    }
    return out
}

I would like to be able to use the generic function for any assignable type, not just implemented interfaces. For example:

bidiChs := []chan Foo{/* ... */}
sendChs := Convert[chan<- Foo](bidiChs)

(This is a re-ask because I choose the wrong question type with the new opinion-based question feature and don't see a way to fix it.)

go generics