Explain the use of Go's type system and type checking for enforcing type correctness and safety in Go programs?