Menu
CoddyTech

基础错误处理

本课属于 Coddy GO 学习旅程的“基础知识”单元。第 108 课,共 109 课。

基本错误处理是 Go 中的一种基础模式,你需要在可能失败的操作后检查错误。

我们来学习如何在 Go 中处理错误,方法是创建一个简单的除法函数,当除数为零时返回错误:

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

这个函数返回两个值:除法的结果和一个错误。如果除数为零,它会返回一条错误消息,而不是尝试进行除法。

现在,来看看如何使用这个函数并处理可能出现的错误:

result, err := divide(10, 0)
    
if err != nil {
    fmt.Println("Error occurred:", err)
    return // 停止运行,或处理错误
}
    
fmt.Println("Result:", result)

运行这段代码后,我们使用 if err != nil 条件检查是否发生了错误。由于我们尝试除以零,函数会返回一个错误,屏幕上会显示以下内容:

Error occurred: division by zero

在 Go 中,把错误作为最后一个返回值返回,并立即检查它,是一种非常常见的模式。这样,你的程序就能妥善处理失败,而不是崩溃。

challenge icon

挑战

简单

在这个挑战中,你将练习 Go 中的基本错误处理。你有一个用于计算两个数相除的函数,但除数为零会导致运行时错误。你的任务是添加错误处理,以防止程序崩溃。

代码中已经有一个同时返回结果和错误的函数。你需要在使用结果之前检查是否有错误。

亲手试试

package main

import (
	"errors"
	"fmt"
)

// 这个函数将 x 除以 y;如果 y 为零,就返回一个错误。
func divide(x, y float64) (float64, error) {
	if y == 0 {
		return 0, errors.New("cannot divide by zero")
	}
	return x / y, nil
}

func main() {
	// 测试值
	numerator := 10.0
	denominator := 0.0
	
	// 调用 divide 函数
	result, err := divide(numerator, denominator)
	
	// TODO: 检查 err 是否不为 nil(即是否有错误)
	// 如果有错误,就用 fmt.Println(err) 打印出来。
	// 否则,用 fmt.Printf("Result: %.2f\n", result) 打印结果。
	
	// 删除这一行,并在上方实现正确的错误处理。
	fmt.Printf("Result: %.2f\n", result)
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Go 在线编译器