go語言中的try catch throw實現

2021-09-02 21:59:04 字數 1295 閱讀 3797

func (o *mssqlutils) executesql(cmd string) (err1 error, affected int64) 

}()stmt, err := o.db.prepare(cmd)

checkerr(err)

var res sql.result

res, err1 = stmt.exec()

checkerr(err1)

if err1 != nil

return

}

函式中的defer中呼叫了recover(),獲取錯誤,並作為函式的返回值。

go中很多函式有error型別的返回值,如果希望以異常的形式丟擲,可以呼叫panic讓recover函式捕獲,如:

func (o *mssqlutils) executewithtrans(callback transcallback) (err1 error) 

}()trans, _ := o.db.begin()

err := callback(o)

if err == nil else

return

}

這裡callback是函式呼叫者編寫的函式,如果其中有錯誤發生,則使用panic丟擲異常,讓上面的recover捕獲。

或採用網上的封裝,模擬c++的方式:

package try

import "reflect"

// try catches exception from f

func try(f func()) *trystruct

}// execeptionhandler handle exception

type execeptionhandler func(inte***ce{})

type trystruct struct

func (t *trystruct) catch(e inte***ce{}, f execeptionhandler) *trystruct

func (t *trystruct) finally(f func()) else

}}()

t.hold()

}//demo

import (

"log"

"try"

)func main() ).catch(1, func(e inte***ce{}) ).catch("", func(e inte***ce{}) ).finally(func() )

}

go 語言中的繼承

go 語言中可以通過匿名field來實現繼承的效果,type t1 struct func t t1 log func t t1 print type t2 struct t2 t2 可以通過t2.log 直接訪問t1的method,就像物件導向的繼承之後一樣訪問,不過這裡要注意的傳遞到log的是t...

Go語言中的常量

常量,一經定義不可更改的量。功能角度看,當出現不需要被更改的資料時,應該使用常量進行儲存,例如圓周率。從語法的角度看,使用常量可以保證資料,在整個執行期間內,不會被更改。例如當預處理器的架構型別,可以保證不被更改。語法如下 const 常量名 可選的型別 常量值 const c1 int 1000g...

go語言中的map

package main import fmt sort func main 同上 var b map int string make map int string 通過make建立map var c make map int string 簡化寫法 d make map int string 設定...