這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
url := m.meta_user + ":" + m.meta_passwd + "@tcp(" + m.meta_host + ":" + strconv.Itoa(m.meta_port) + ")/" + m.meta_db + "?autocommit=true&charset=utf8" m.conn, err = sql.Open("mysql", url) if err != nil { panic(err) }
這段代碼 只是作為mysql的建立串連使用,看似沒問題。
實際上, 只要這些串連參數是合法的, err永遠是nil的,你肯定期串連失敗的時候報錯的,實際卻不會,這是因為:
Open may just validate its arguments without creating a connection to the database. To verify that the data source name is valid, call Ping.
Open 可能只是驗證這些參數,並不會去串連database,要驗證這個串連是否成功,使用ping()方法。。
改進後:
result = true url := m.meta_user + ":" + m.meta_passwd + "@tcp(" + m.meta_host + ":" + strconv.Itoa(m.meta_port) + ")/" + m.meta_db + "?autocommit=true&charset=utf8" m.conn, err = sql.Open("mysql", url) if err != nil { result = false } err = m.conn.Ping() if err != nil{ result = false fmt.Println(err) } return result,err
不得不說,這是坑啊。