我在我的golang程序中有init函数。我需要使它连接循环,直到它连接到数据库,如果它不能连接,它空闲,然后尝试一次又一次,60秒,如果它不能连接,然后它存在了。此外,具有覆盖默认60秒的环境变量,用户可以设置自己的时间,直到连接。我有我的代码下面我看,有没有在网络上的坚实的解决方案。
var override string = os.Getenv("OVERRIDE")
func dsn() string {
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", username, password, ipdb, portdb, dbName)
func init() {
var db, err = sql.Open("mysql", dsn())
if err != nil {
fmt.Println(err.Error())
} else {
fmt.Printf("Connection established to MYSQL server\n%s\n", dsn())
}
// Checking if table exists in database
rows, table_check := db.Query("select * from " + "Url" + ";")
if table_check == nil {
fmt.Println("\nTable exists in the Database")
count := 0
for rows.Next() {
count++
}
fmt.Printf("Number of records are %d \n", count)
} else {
fmt.Printf("\nTable does not exist in Database %s", table_check)
_, status := db.Exec("CREATE TABLE Url (LongUrl varchar(255),ShortUrl varchar(32));")
if status == nil {
fmt.Println("\n New table created in the Database")
} else {
fmt.Printf("\n The table was not created %s", status)
}
}
defer db.Close()
}
func main(){
......
}
1条答案
按热度按时间jtoj6r0c1#
您可以使用带计时器通道的开关。
每500ms尝试一次连接,如果在60秒内开关未被解析,则超时通道退出循环。
例如:
注意请视需要行程您的错误。
sql.Ping()
可能会传回某些特定的错误,提示您应该重试。有些错误可能不值得重试。有关定时器和通道,请参阅: