Go 语言:error 的使用


#Go 语言#


error 是一个内置的接口(见源码的 builtin/builtin.go 文件):

type error interface {
	Error() string
}

很多包里面都有自定义的 error。其中内置的 errors 包里面提供了一个简单通用的实现 error 接口的结构体:

package errors

func New(text string) error {
	return &errorString{text}
}

type errorString struct {
	s string
}

func (e *errorString) Error() string {
	return e.s
}

示例1:

package main

import (
	"errors"
)

func main()  {
	var err error = errors.New("出现错误")
	panic(err)  // panic 会终止程序运行,并打印错误堆栈
}

执行后报错如下:

panic: 出现错误

goroutine 1 [running]:
main.main()
        /path/to/learn_error.go:9 +0x71

示例2:通过 error 的 Error 方法获取错误信息字符串

package main

import (
	"errors"
	"fmt"
)

func main()  {
	var err error = errors.New("出现错误")
	var errMsg string = err.Error()
	fmt.Println(err)
	fmt.Println(errMsg)
}

运行结果:

出现错误
出现错误

示例3:

package main

import "fmt"

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main()  {
	checkError(nil) // 不会报错
	fmt.Println("Hello")
}

运行结果:

Hello

示例4:

package main

import (
	"errors"
)
func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main()  {
	var err error = errors.New("出现错误")
	checkError(err)
}

运行结果:

panic: 出现错误

goroutine 1 [running]:
main.checkError(...)
        /path/to/learn_error.go:8
main.main()
        /path/to/earn_error.go:14 +0x72

( 本文完 )