For example:

var x interface{}

switch i := x.(type) {
  case nil:
    printString("x is nil")               // type of i is type of x (interface{})
  case int:
    printInt(i)                           // type of i is int
  case float64:
    printFloat64(i)                       // type of i is float64
  case func(int) float64:
    printFunction(i)                      // type of i is func(int) float64
  case bool, string:
    printString("type is bool or string") // type of i is type of x (interface{})
  default:
    printString("don't know the type")    // type of i is type of x (interface{})
}