错误的概念
本课属于 Coddy GO 学习旅程的“基础知识”单元。第 102 课,共 109 课。
在 Go 中,errors 是表示出现问题的值。Go 会显式处理错误,而不是使用异常。
我们来创建一个在除数为零时可能产生错误的函数:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}这个函数会返回两个值:除法的结果和可能出现的错误。如果除数为零,我们会返回错误消息,而不是尝试进行除法。
现在,让我们使用函数并处理可能出现的错误:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}运行这段代码后,屏幕上会显示一条错误消息,因为我们尝试除以 0:
Error: cannot divide by zero这展示了 Go 的错误处理模式:检查是否发生了错误(err != nil),然后采取相应的措施。如果没有发生错误,我们就可以安全地使用结果。
挑战
简单在这个挑战中,你将练习在 Go 中处理错误。你将创建一个函数,用来计算两个数相除,并在尝试除以零时返回错误。
你的任务是:
- 完成
divide函数,它接收两个整数,并返回它们相除的商和一个错误。 - 如果除数为零,返回 0 和一条错误消息 "division by zero"。
- 如果除法有效,返回结果,并用
nil表示没有错误。 - 在
main函数中,使用提供的值调用divide,并妥善处理任何错误。
这个练习展示了 Go 函数通常如何同时返回结果和错误,以及如何检查和处理这些错误。
亲手试试
package main
import (
"errors"
"fmt"
)
// divide 将 a 除以 b,并返回结果
// 如果 b 为 0,就返回一个错误
func divide(a, b int) (int, error) {
// TODO: 实现 divide 函数
// 如果 b 为 0,返回 0 和一个消息为 "division by zero" 的错误
// 否则,返回 a/b,错误值返回 nil
}
func main() {
// 第一个测试用例
a, b := 10, 2
result, err := divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
// 第二个测试用例
a, b = 8, 0
result, err = divide(a, b)
if err != nil {
fmt.Printf("Error: %s\n", err)
} else {
fmt.Printf("Result: %d\n", result)
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Go 在线编译器