go 語言錯誤處理

<meta charset="utf-8">

go 語言錯誤處理

panic recover defer 最大公約數(shù) 最小公倍數(shù)

go語言中的沒有try catch的。代替的是panic-recover的機制。手動編寫錯誤提示。

舉個栗子:

//求正整數(shù)a和b的最小公倍數(shù)
 package main import "fmt" 
//最小公約數(shù) 
func multiple(a, b int) int {    
   c := divisor(a, b)    
   return (a * b / c) 
} 
//最大公約數(shù) 
func divisor(a, b int) int {
     var r int
     fmt.Println(a, "%", b, "=", a%b)
     for {
         r = a % b
         if r != 0 {
             a = b
             b = r
         } else {
             break
         }
     }
     return b
 }
 func main() {
     fmt.Println("aa")
     var a, b int
     fmt.Scanf("%d,%d", &a, &b)
     defer func() {
         if err := recover(); err != nil {
             fmt.Println("異常退出", err)
         } else {
             fmt.Println(multiple(a, b))
         }
     }()
     f(a, b)
 }
 //判定不能a>b
 func f(a, b int) {
     if a > b {
         panic("a不能大于b")
     }
 }

為了能捕捉到 panic輸出的內(nèi)容,并讓其不報錯。主程序中需要對使用驗證的部分進(jìn)行defer。

關(guān)于defer的func(){}()的問題

嘗試一下

func test() {
     for i := 0; i < 3; i++ {
         defer func() {
             fmt.Println(i)
         }()
     }
 }
 func main(){
   test()
 }

輸出為:


image.png

看來循環(huán)后才把i值傳進(jìn)去。

func test() {
     for i := 0; i < 3; i++ {
         defer func(i int) {
             fmt.Println(i)
         }(i)
     }
 }

通過(i)把值傳進(jìn)去。

輸出:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容