panic會(huì)讓程序停止,為了防止因panic造成這類(lèi)問(wèn)題,需要將panic覆蓋掉
Painc用法是:用于拋出錯(cuò)誤。Recover()用法是:將Recover()寫(xiě)在defer中,并且在可能發(fā)生panic的地方之前,先調(diào)用此defer的東西(讓系統(tǒng)方法域結(jié)束時(shí),有代碼要執(zhí)行。)當(dāng)程序遇到panic的時(shí)候(當(dāng)然,也可以正常的調(diào)用出現(xiàn)的異常情況),系統(tǒng)將跳過(guò)后面的代碼,進(jìn)入defer,如果defer函數(shù)中recover(),則返回捕獲到的panic的值。
成都創(chuàng)新互聯(lián),專(zhuān)注為中小企業(yè)提供官網(wǎng)建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站制作、成都響應(yīng)式網(wǎng)站建設(shè)公司、展示型網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作等服務(wù),幫助中小企業(yè)通過(guò)網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷(xiāo)推廣問(wèn)題。
package main
import (
"fmt"
"runtime"
"time"
)
func test() {
defer func() {
//覆蓋panic,將panic輸出而不停止程序
if err := recover(); err != nil {
fmt.Println("panic:", err)
}
}()
var m map[string]int
//該map沒(méi)有make,會(huì)報(bào)錯(cuò)!
m["stu"] = 100
}
func calc() {
for {
fmt.Println("i'm calc")
time.Sleep(time.Second)
}
}
func main() {
num := runtime.NumCPU()
runtime.GOMAXPROCS(num - 1)
go test()
for i := 0; i < 2; i++ {
go calc()
}
time.Sleep(time.Second * 10000)
}