Explain the use of Go's type assertion and type switch for type checking and switching in Go?