- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2017-06-07 17:48 编辑
@cokeboL, 有没有趟过这个坑?
mysql 自己认最大链接 150,
现在是设置了
db.SetMaxOpenConns(10);
db.SetMaxIdleConns(10);
不起作用;
stmt.Close() 也调用了
row.Close() 也调用了
就是不起作用;
一次调用创建一个新连接, 150次准挂
我就不明白了, 这还有救吗
func db_get() (*sql.DB, error) {
if (db != nil) {
return db, nil;
}
mux.Lock();
if (db != nil) {
mux.Unlock();
return db, nil;
}
conf := setting.Conf;
if (conf == nil) {
mux.Unlock();
return nil, errors.New("can't get mysql configuration");
}
var buf bytes.Buffer;
buf.WriteString(conf.Mysql.User);
buf.WriteByte(':');
buf.WriteString(conf.Mysql.Passwd);
buf.WriteString("@tcp(");
buf.WriteString(conf.Mysql.Addr);
buf.WriteString(")/db?charset=utf8");
db, err := sql.Open("mysql", buf.String());
if (err == nil) {
db.SetMaxOpenConns(10);
db.SetMaxIdleConns(10);
}
mux.Unlock();
return db, err;
}
func UserGet(email string) (*Account, error) {
db, err := db_get();
if (err != nil) {
return nil, err;
}
stmt, err := db.Prepare("select * from account where email = ?");
if (err != nil) {
return nil, err;
}
defer stmt.Close();
row, err:= stmt.Query(email);
if (err != nil) {
return nil, err;
}
defer row.Close();
obj, err := fill_row(row, &Account{});
if (err != nil) {
return nil, err;
} else if (obj == nil) {
return nil, nil;
}
return obj.(*Account), nil;
}
|
|