gpt4 book ai didi

go - 使用go-sql-driver时如何区分连接错误和其他错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:54 25 4
gpt4 key购买 nike

func mainloop(db *sql.DB) {
type pushTask struct {
TaskId string
Uri string
}

stmt, err := db.Prepare("INSERT INTO ErrPushCache(TaskId, Uri) VALUES(?, ?)")
if err != nil {
log.Fatal("db.Prepare Failed ", err)
}

var (
mysqlOk bool = true
task pushTask
)
for {
task.TaskId = RandStringRunes(8)
task.Uri = RandStringRunes(16)

res, err := stmt.Exec(task.TaskId, task.Uri)
if err != nil {
if err == driver.ErrBadConn {
if mysqlOk {
log.Print("Connection with mysql seems down, %s", err.Error())
mysqlOk = false
os.Exit(1)
}
} else {
log.Print("Exec failed ", err)
}

time.Sleep(2 * time.Second)
continue
}
if !mysqlOk {
log.Print("Connection with mysql is ok now")
mysqlOk = true
}
lastId, err := res.LastInsertId()
if err != nil {
log.Print("LastInsertId failed ", err)
}
rowCnt, err := res.RowsAffected()
if err != nil {
log.Print("RowsAffected failed ", err)
}
log.Printf("ID = %d, affected = %d\n", lastId, rowCnt)

time.Sleep(20 * time.Second)
}
}

func main() {
db, err := sql.Open("mysql",
"rench:ren123@tcp(192.168.1.61:3306)/hunanTV")
if err != nil {
log.Fatal("sql.Open Failed ", err)
}

mainloop(db)

defer db.Close()
}

在mainloop函数中,如果mysql和client的连接断开,stmt.Exec会失败,返回错误,如何区分连接错误和其他错误。(err == driver.ErrBadConn always错误)。

如果连接断开,日志是:

2016/01/29 17:21:31 Exec 拨号 tcp 192.168.1.61:3306 失败:getsockopt:连接被拒绝2016/01/29 17:21:33 Exec 拨号 tcp 192.168.1.61:3306 失败:getsockopt:连接被拒绝2016/01/29 17:21:35 Exec 拨号 tcp 192.168.1.61:3306 失败:getsockopt:连接被拒绝2016/01/29 17:21:37 Exec 拨号 tcp 192.168.1.61:3306 失败:getsockopt:连接被拒绝2016/01/29 17:21:39 Exec 拨号 tcp 192.168.1.61:3306 失败:getsockopt:连接被拒绝

...

最佳答案

网络错误将是满足 net.Error 接口(interface)的类型。

if err, ok := err.(net.Error); ok {
log.Println("network error:", err)
} else {
log.Println("other error:", err)
}

在大多数情况下,这并不重要,因为操作因某些原因而失败,无论如何您都需要处理它。仅当您想根据真正需要检查的网络错误采取不同的操作时。

关于go - 使用go-sql-driver时如何区分连接错误和其他错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35081310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com