欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

错误处理

程序员文章站 2022-05-29 11:50:01
...

Go错误处理

在Go语言中,一种约定是在调用可能出现问题的方法或函数时,返回一个类型为错误的值。这意味着如果出现了问题,函数通常不会引发异常,而让调用者决定如何处理错误。

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	file, err := ioutil.ReadFile("mod.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("%s", file)
	
	// 输出 open mod.txt: The system cannot find the file specified.
}

在Go语言中,错误是一个值。便准库声明了接口error

type error interface {
	Error() string
}

这个接口只有一个方法Error,它返回一个字符串。

创建错误

错误类型

package main

import (
	"errors"
	"fmt"
)

func main() {
	err := errors.New("something went wrong")
	if err != nil {
		fmt.Println(err)
		// log.Fatal(err)
	}
}

设置错误格式

除了errors包外,标准库中的fmt包还提供了方法Errorf,可用于设置返回的错误字符串的格式。

package main

import (
	"fmt"
)

func main() {
	name, role := "moddemod", "w"
	err := fmt.Errorf("The %v %v quit", name, role)
	if err != nil {
		fmt.Println(err)
	}
}

从函数返回错误

package main

import (
	"fmt"
)

func Half(numberToHalf int) (int, error) {
	if numberToHalf%2 != 0 {
		return -1, fmt.Errorf("Cannot half %v", numberToHalf)
	}
	return numberToHalf / 2, nil
}

func main() {
	n, err := Half(19)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(n)
}
相关标签: 错误处理 Go