前面介紹了錯誤處理以及goroutine,
今天來看看,當goroutine裡面出狀況時,
golang是否能夠有效的處理錯誤情況.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("主函式啟動!")
// 啟動一個 goroutine
go 玉面飛鷹()
// 啟動另一個 goroutune
go 油達大師()
fmt.Println("主函式睡眠中!")
time.Sleep(time.Second * 12)
fmt.Println("主函式結束!")
}
func 玉面飛鷹() {
// 先把救兵安排好
defer func() {
if e := recover(); e != nil {
fmt.Println("月亮的使者‧月光刑警!還有助手美茄子刑警,一同登場!")
fmt.Printf("出包情況是: %s\n", e)
}
}()
fmt.Println("大家好! 我是人見人愛,花見花開的玉面飛鷹!")
fmt.Println("看我飛~~~~~ 噗~ 噗~噗~ 展翅飛翔~!")
time.Sleep(time.Second * 5)
panic("玉面飛鷹肚子餓,沒力!")
fmt.Println("報告! 玉面飛鷹到達目的地!") // 玉面飛鷹實際上沒飛到
}
func 油達大師() {
fmt.Println("師大達油是我! 好家大!")
time.Sleep(time.Second * 1)
fmt.Println("砍!!!")
fmt.Println("工收完砍!")
}
執行結果:
./hello54
主函式啟動!
主函式睡眠中!
大家好! 我是人見人愛,花見花開的玉面飛鷹!
看我飛~~~~~ 噗~ 噗~噗~ 展翅飛翔~!
師大達油是我! 好家大!
砍!!!
工收完砍!
月亮的使者‧月光刑警!還有助手美茄子刑警,一同登場!
出包情況是: 玉面飛鷹肚子餓,沒力!
主函式結束!