我在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
}
...
}
什么是在模型控制器应用程序中处理数据库错误的正确方法? 如何减少代码间的错误处理? 可能是有内置功能的数据库包