在golang app中处理数据库错误的正确方法

时间:2016-07-15 14:55:22

标签: go

我在Go上有简单的网络应用程序。记录错误是应用程序的重要组成部分。 错误可以通过以下方式实现:

a)数据库错误 - 当与数据库交互时,我们需要记录所有错误 b)输入参数,逻辑错误

我的典型处理程序如下:

func handler(r,w) {
  var client models.Client
  err := json.NewDecoder(r.Body).Decode(&client)
  log.Error(err) // if error was

  err = client.Validate()
  log.Error(err) // if error was

  err = client.Save()
}
...
func (client *Client) Save() error {
   _, err := db.Exec(`insert into client ....`, client.data())
   if err != nil {
     log.Error(err)
     return err
   }
   ...
}

查看* Client.Save()方法。当DB错误发生时,我们记录它。 我的记录器需要文件:发生错误的行。

我认为数据库包处理错误本身的方法更好。 例如,有一些数据库类型可以记录方法Exec(),Query,QueryRow中的所有错误,其中包含文件:line,其中发生客户端代码错误。

type Database struct {
}
func (d *Database) Exec(...) result, error {
      res, err := d.db.Exec()
      if err != nil {
        log.Error(err, calldepth=3) // calldepth=3 to show place in client code where errors occures
         return nil, err
     }
}

因此,我们可以重写方法* Client.Save()mehtod以减少客户端代码中的错误处理:

func (client *Client) Save() error {
   _, err := db.Exec(`insert into client ....`, client.data()) // error will processed in Exec
   if err != nil {
     return err
   }
   ...
}

什么是在模型控制器应用程序中处理数据库错误的正确方法? 如何减少代码间的错误处理? 可能是有内置功能的数据库包

0 个答案:

没有答案