Golang惯用错误处理

背风处

我创建了一个“基础”存储库结构,供独立使用和嵌入式使用(例如,与CustomerRepository一起使用),以避免必须一直检查错误,并避免为Gorp创建抽象(数据库工具包),并稍微创建一个API来我喜欢

我在此基本结构中检查错误,并且发现了错误,就像我认为的那样,它表明存在开发错误,并且代码也可能会出现恐慌,例如验证等,应该在数据到达存储库之前发生。

我发现了这个问题Go Error Handling Techniques,但是它并没有涵盖将错误包装在基本结构中的方法,就像我已经做过的一样,只是惊慌失措。

是我惯用的Go吗?

package repositories

import (
    "github.com/coopernurse/gorp"
)

type Repository struct {
    Gorp gorp.SqlExecutor
}

func (r *Repository) GetById(i interface{}, id int) interface{} {
    obj, err := r.Gorp.Get(i, id)
    if err != nil {
        panic(err)
    }
    return obj
}

func (r *Repository) Get(holder interface{}, query string, args ...interface{}) interface{} {
    if err := Gorp.SelectOne(holder, query, args); err != nil {
        panic(err)
    }
}

func (r *Repository) Select(i interface{}, query string, args ...interface{}) {
    if _, err := Gorp.Select(holder, query, args); err != nil {
        panic(err)
    }
}

func (r *Repository) Insert(list ...interface{}) {
    if err := r.Gorp.Insert(list...); err != nil {
        panic(err)
    }
}

func (r *Repository) Update(list ...interface{}) int64 {
    count, err := r.Gorp.Update(list...)
    if err != nil {
        panic(err)
    }
    return count
}

func (r *Repository) Delete(list ...interface{}) int64 {
    count, err := r.Gorp.Delete(list...)
    if err != nil {
        panic(err)
    }
    return count
}
马丁·加拉格尔

惯用的方法是返回带有相关类型值的错误,即

func (list ...interface{}) (v int46, err error) {}

...,然后在调用这些函数的地方检查err!= nil。

最终,使用panic()将导致类似异常的错误处理和更多样板代码(如果您认为错误是可恢复的)。

惯用的错误处理在Go中很冗长,但比模拟异常要少(从根本上说,这不是“ Go方式”)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Clojure中的惯用错误处理

来自分类Dev

Pentaho通用错误处理脚本

来自分类Dev

Golang错误处理错误

来自分类Dev

生产中未调用错误处理程序

来自分类Dev

在存储过程中使用错误处理

来自分类Dev

Angular 2 Http响应通用错误处理程序

来自分类Dev

Swift惯用错误检查

来自分类Dev

在不使用错误处理程序的情况下处理 Application.Workbooks 的错误

来自分类Dev

Yii2:仅对致命错误使用错误处理程序或指定已处理的错误类型

来自分类Dev

在Python Cloud Function中使用错误处理程序返回JSON

来自分类Dev

VBScript-使用错误处理来确定任务是否存在

来自分类Dev

如何在 Angular 6 中实现与 forkJoin 一起使用的通用错误处理?

来自分类Dev

无论我使用错误处理程序从express发送什么错误,都获得错误代码500?

来自分类Dev

SimpleMessageListenerContainer错误处理

来自分类Dev

流星错误处理

来自分类Dev

OpenSSL错误处理

来自分类Dev

fineUploader错误处理

来自分类Dev

RxJava错误处理

来自分类Dev

Lua错误处理

来自分类Dev

透明的错误处理

来自分类Dev

PromiseKit的错误处理

来自分类Dev

URLRetrieve错误处理

来自分类Dev

403错误处理

来自分类Dev

VBScript错误处理

来自分类Dev

URLRetrieve错误处理

来自分类Dev

setOnClickFillInIntent错误处理

来自分类Dev

Python:错误处理

来自分类Dev

PromiseKit的错误处理

来自分类Dev

错误处理条件