go语言没有异常处理,一般通过返回值处理错误。例如strconv.Atoi函数将一个字符串转换成一个整数:
strconv.Atoi
package main import ( "fmt" "os" "strconv" ) func main() { if len(os.Args) != 2 { os.Exit(1) } n, err := strconv.Atoi(os.Args[1]) if err != nil { fmt.Println("not a valid number") } else { fmt.Println(n) } }
你也可以自己创建一个错误类型;唯一的要求就是它必须实现内置类型error接口:
error
type error interface { Error() string }
通常情况下,我们可以通过导入errors包,然后使用包中的New函数创建一个自己的错误类型:
errors包
New
import ( "errors" ) func process(count int) error { if count < 1 { return errors.New("Invalid count") } ... return nil }
go的标准库就是通过这种模式使用错误类型变量。例如,在io包中,有一个EOF变量定义如下:
io
EOF
var EOF = errors.New("EOF")
这是一个包级别变量(它是定义在函数外面),该变量是可以访问的(因为第一个字母是大写字母)。当我们从文件或者标准输入中读取数据时,很多函数都能返回这种错误。如果有上下文关系,你也应该使用这个错误。作为消费者,我们可以使用这个单例:
package main import ( "fmt" "io" ) func main() { var input int _, err := fmt.Scan(&input) if err == io.EOF { fmt.Println("no more input!") } }
最后要指出的是,go语言有panic和recover函数。panic类似抛出异常,而recover类似捕获异常;但是很少使用它们。
panic
recover
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8