The title is a little hard to parse so here's more verbose, understandable example:
import "fmt"
import "reflect"
type Stringer interface {
    String() string
}
type MyInt int
func (m MyInt) String() string {
    return fmt.Sprintf("I'm number %d!", m)
}
func main() {
    var m = MyInt(10)
    m_type := reflect.TypeOf(m)
    m_type.Implements(reflect.TypeOf(Stringer(nil))) // This does not work.
}
If you try this code, you will get a panic from within reflect.[some internal class].Implements. Why doesn't this work? Is this some weird side effect of typed nil and nil interfaces?
What's the best workaround for it? I've seen this in the wild:
m_type.Implements(reflect.TypeOf((*Stringer)(nil).Elem())) // true
It works, but it's ugly as hell. Is there a cleaner way? Why does this work when the naive approach does not?
 
Aucun commentaire:
Enregistrer un commentaire