package main import "fmt" type Student struct { name string age int } type Desriber interface { Describe() } func (std Student) Describe(){ fmt.Printf("%s and %d y.o",std.name,std.age) } func TypeDescriber(i interface{}){ switch v := i.(type){ case string: fmt.Println("I am string") case int: fmt.Println("I am int") case Desriber: fmt.Println("I am describer!") v.Describe() default: fmt.Println("Unknown type but I still work!") } } func main() { TypeDescriber(9) std := Student{"Alex", 19} TypeDescriber(std) }