go 如何实现php的try catch
时间: 2023-07-07 18:40:03 浏览: 110
在 Go 语言中,可以使用 `defer` 和 `recover` 机制来实现类似 PHP 中的 try catch 机制。
下面是一个示例代码:
```go
func main() {
defer func() {
if err := recover(); err != nil {
log.Println("程序出现异常:", err)
}
}()
// 这里是你的程序代码
// 如果程序出现异常,会触发 panic,然后被 defer 中的 recover 捕获
// 如果你想抛出一个异常,可以通过 panic 函数来实现,如:panic("出现异常")
}
```
在上述代码中,我们使用了 `defer` 关键字来定义一个延迟调用函数,该函数会在程序退出时被调用。在该函数中,我们使用 `recover` 函数来捕获程序 panic 异常,并输出异常信息。当程序遇到不可恢复的错误时,会触发 panic,程序会立即停止执行,并且会调用所有已注册的 defer 函数。因此,我们可以使用上述代码来捕获异常,并进行处理。
如果你想抛出一个异常,可以通过 panic 函数来实现,如:`panic("出现异常")`。当程序执行到该语句时,会触发 panic 异常,并且程序会立即停止执行,并调用所有已注册的 defer 函数。通过使用 defer 和 recover 机制,我们可以实现类似 PHP 中的 try catch 机制。
相关问题
php try catch用法 在go里怎么用
在 Go 语言中,可以使用 `defer` 和 `recover` 来实现类似于 PHP 中 `try-catch` 的功能。
`defer` 用于注册延迟调用,即在函数退出时执行一些操作。`recover` 用于捕获 panic,恢复正常的程序执行。
下面是一个示例:
```go
func divide(a, b int) (result int, err error) {
defer func() {
if e := recover(); e != nil {
err = fmt.Errorf("panic: %v", e)
}
}()
result = a / b
return
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
```
在上面的示例中,`divide` 函数中使用了 `defer` 和 `recover` 来捕获除以 0 导致的 panic,然后将其转换为 error 返回。在 `main` 函数中,我们检查 error 是否为 nil,如果不是则表示出错了,否则输出计算结果。
阅读全文