The most frequent use case I and my coworkers run into where we use them is when we want type covariance on a slice.
I.e., when you want to write a function that take some slice of any type T that implements interface I, such that []T is a valid input instead of just explicitly []I.