c语言编程笔录

首页 >   > 笔记大全

笔记大全

Go 语言中的常见错误有哪些

更新时间:2023-11-30

错误类型

Go 语言中常见的错误类型主要包括语法错误、运行时错误和逻辑错误。

package main

import (
    "fmt"
)

func main() {
    // 语法错误,少写了一个括号
    fmt.Println("Hello, World!"
    // 运行时错误,除零错误
    a, b := 10, 0
    fmt.Println(a / b)
    // 逻辑错误,输出结果错误
    c, d := 2, 3
    fmt.Println(c - d)
}

代码示例展示了三种错误类型,分别是语法错误(少写了一个括号),运行时错误(除零错误),逻辑错误(输出结果错误)。

错误处理

Go 语言提供了 panic 和 recover 两个函数来进行错误处理。当程序遇到 panic 函数时,程序将立即停止运行并打印错误信息,同时执行 defer 函数(如果存在)。recover 函数用于捕获 panic 函数抛出的错误。

package main

import (
	"fmt"
)

func testRecover() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	panic("Test panic error")
}

func main() {
	testRecover()
}

代码示例展示了 recover 函数的使用。在 testRecover 函数中,我们使用 panic 函数抛出一个错误信息,然后使用 defer 和 recover 来捕获并输出错误信息。

错误处理原则

在处理错误时,有几个原则需要遵循:

  • 错误必须被处理,否则会导致程序崩溃。
  • 在处理错误时,应该尽可能的提供详细的错误信息。
  • 错误信息应该以日志的形式打印,而不是直接输出到控制台。
package main

import (
	"errors"
	"fmt"
	"log"
)

func testErrorMsg() error {
	return errors.New("Test error message")
}

func main() {
	err := testErrorMsg()
	if err != nil {
		log.Println(err)
	}
}

代码示例展示了错误处理原则。在 testErrorMsg 函数中,我们使用 errors.New 函数创建了一个错误信息,然后在 main 函数中使用 log 包打印错误信息。

错误类型自定义

在实际开发中,我们可以自定义错误类型来更好地处理错误。为了定义一个错误类型,我们需要定义一个结构体,并实现 Error 方法。

package main

import (
	"fmt"
)

type MyError struct {
	errMsg string
}

func (e *MyError) Error() string {
	return fmt.Sprintf("Error occurred: %v", e.errMsg)
}

func testMyError() error {
	return &MyError{"Test MyError message"}
}

func main() {
	err := testMyError()
	if err != nil {
		fmt.Println(err)
	}
}

代码示例展示了自定义错误类型。我们定义了一个结构体 MyError,实现了 Error 方法。在 testMyError 函数中,我们返回了一个 MyError 类型的错误,并在 main 函数中输出了错误信息。