第 17 天要介绍 golang 的例外处理,那麽我们就进入正题吧 ─=≡Σ(((っ゚∀゚)っ
虽然说是例外处理,但其实 Go 并没有真的抛出例外的机制,而是透过 panic
来让当前执行的程序码中断流程。
package main
import (
"fmt"
"time"
)
func main() {
cat := ""
go func() {
defer func() {
fmt.Println("我是 defer")
}()
if cat == "" {
panic("我是 panic!")
}
}()
time.Sleep(1 * time.Second)
fmt.Println("这是 main 的最尾排")
}
// => 我是 defer
// panic: 我是 panic!
在进入 panic 的情境下,会在结束当下的 goroutine 并进行 defer,而这时候搭配 recover 服用,这样就能够撷取到 panic 的状况进而达成类似 try...catch...
的方法。
我们在执行程序时,不会希望一个小错误就导致整个程序码坏光光。
而 recover 能够在接收到 panic 状况时,作出处理的行为,这样被中断的程序码就能够继续向下执行。
package main
import (
"fmt"
"time"
)
func main() {
cat := ""
func() {
defer func() {
if err := recover(); err != nil {
fmt.Println("让开,我来 Recover!")
}
}()
if cat == "" {
fmt.Println("即将进入 panic 状态")
panic("我是 panic!")
}
}()
time.Sleep(1 * time.Second)
fmt.Println("这是 main 的最尾排")
}
// => 即将进入 panic 状态
// 让开,我来 Recover!
// 这是 main 的最尾排
有了 recover 後,就能够让函式继续往下执行。
有任何问题欢迎与我告知 :)
本篇文章同步更新於我的部落格
Abstract 在一个广大领域需求的市场,无论你身处哪种开发情境下,势必都会遇到需要开发API进行...
Study Lab 总结 在这 30 天中介绍了许多 DevOps 的工具以及工作流程,若读者想要学...
今天的重点 索引 基本索引: 先建立一个4x3的ndarray来让我们实际操作 阵列索引是由外而内的...
前言 今天继续我们未完成的建模大业吧! 我们要建立的seq2seq模型由LSTM编码器与解码器串接而...
延续昨日 今天来完善我们的 我的专案的功能吧! 首先这是目前的我的专案 再来新增2个按钮 嘟嘟噜新增...