Я пишу простой REST API, используя джин. Я прочитал много сообщений и текстов о том, как сделать обработку ошибок менее повторяющейся на ходу, но я не могу понять, как это сделать в обработчиках джина.
Вся моя служба выполняет несколько запросов к базе данных и возвращает результаты в виде JSON, поэтому типичный обработчик выглядит так:
func DeleteAPI(c *gin.Context) {
var db = c.MustGet("db").(*sql.DB)
query := "DELETE FROM table WHERE some condition"
tx, err := db.Begin()
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
defer tx.Rollback()
result, err := tx.Exec(query)
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
num, err := result.RowsAffected()
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
err = tx.Commit()
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"deleted": num})
}
Как видите, даже этот простой обработчик четыре раза повторяет один и тот же шаблон «if err! = Nil». В API на основе «select» у меня их вдвое больше, поскольку есть потенциальные ошибки при связывании входных данных и ошибки при маршалинге ответа в JSON. Есть ли хороший способ сделать это более СУХИМ?
if err != nil
- person Aurelia   schedule 31.05.2018