zoukankan      html  css  js  c++  java
  • go语言中的try、catch、throw实现

    func (o *MsSqlUtils) ExecuteSql(cmd string) (err1 error, affected int64) {
    defer func() { //必须要先声明defer,否则不能捕获到panic异常
    if err2 := recover(); err2 != nil {
    err1 = fmt.Errorf("internal error: %v", err2)
    }
    }()
    stmt, err := o.Db.Prepare(cmd)
    checkErr(err)
    var res sql.Result
    res, err1 = stmt.Exec()
    checkErr(err1)
    if err1 != nil {
    affected, err1 = res.RowsAffected()
    }
    return
    }
    函数中的defer中调用了recover(),获取错误,并作为函数的返回值。

    go中很多函数有error类型的返回值,如果希望以异常的形式抛出,可以调用panic让recover函数捕获,如:

    func (o *MsSqlUtils) ExecuteWithTrans(callback TransCallback) (err1 error) {
    defer func() { //必须要先声明defer,否则不能捕获到panic异常
    if err2 := recover(); err2 != nil {
    err1 = fmt.Errorf("internal error: %v", err2)
    }
    }()
    trans, _ := o.Db.Begin()
    err := callback(o)
    if err == nil {
    trans.Commit()
    } else {
    trans.Rollback()
    panic(err)
    }
    return
    }

  • 相关阅读:
    NetCore去注册Eureka
    netcore项目使用swagger开发
    二、Rabbit使用-初次测试
    一、Rabbit使用-安装教程
    安装Erlang使用RabbitMQ
    Mac根目录下挂载文件
    将博客搬至CSDN
    photoshop for mac
    ssh 端口转发
    Linux 全局使用php命令
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/14738390.html
Copyright © 2011-2022 走看看