How does Go handle task scheduling and task execution, and what are the best practices for task scheduling in Go programs?