package main import "fmt" var i = 5 var str = "ABC" type Person struct { name string age int } type Any interface{} func main() { var val Any val = 5 fmt.Printf("val has the value: %v\n", val) val = str fmt.Printf("val has the value: %v\n", val) pers1 := new(Person) pers1.name = "Rob Pike" pers1.age = 55 val = pers1 fmt.Printf("val has the value: %v\n", val) switch t := val.(type) { case int: fmt.Printf("Type int %T\n", t) case string: fmt.Printf("Type string %T\n", t) case bool: fmt.Printf("Type boolean %T\n", t) case *Person: fmt.Printf("Type pointer to Person %T\n", *t) default: fmt.Printf("Unexpected type %T", t) } }