Я создал базовую структуру репозитория для автономного и встроенного использования (например, с CustomerRepository), чтобы избежать необходимости постоянно проверять ошибки и создавать абстракции для Gorp (инструментария базы данных) и создавать API немного больше по душе.
Я проверяю наличие ошибок в этой базовой структуре и панике, если она найдена, как если бы она существовала, по моему мнению, она указывает на ошибку dev, и код может также паниковать, поскольку проверка и т.д. должна произойти до того, как данные будут получены в репозиторий.
Я нашел этот вопрос 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
}