错误处理
程序员文章站
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)
}