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 設定...