golang mysql 单例怎么实现?

2019-08-11 18:33:12 +08:00
 Flourite

不是代码的单例,要能实现复用连接

3985 次点击
所在节点    Go 编程语言
8 条回复
jksusu
2019-08-11 18:53:06 +08:00
连接池
Leigg
2019-08-12 09:09:21 +08:00
要复用连接应该用连接池,初始化连接池可以用单例。
Leigg
2019-08-12 09:10:10 +08:00
go 的 mysql 基本都有实现连接池。
Leigg
2019-08-12 09:10:25 +08:00
@Leigg mysql 库
TypeErrorNone
2019-08-12 10:52:13 +08:00
```
// Prefer a free connection, if possible.
numFree := len(db.freeConn)
if strategy == cachedOrNewConn && numFree > 0 {
conn := db.freeConn[0]
copy(db.freeConn, db.freeConn[1:])
db.freeConn = db.freeConn[:numFree-1]
conn.inUse = true
db.mu.Unlock()
if conn.expired(lifetime) {
conn.Close()
return nil, driver.ErrBadConn
}
// Lock around reading lastErr to ensure the session resetter finished.
conn.Lock()
err := conn.lastErr
conn.Unlock()
if err == driver.ErrBadConn {
conn.Close()
return nil, driver.ErrBadConn
}
return conn, nil
}
```
sql 库默认有连接池
Flourite
2019-08-12 18:26:38 +08:00
sql 库默认是有连接池,这个是正确的,但你如何在不同的 package 共用同一个连接?
nomoon
2019-08-13 05:00:40 +08:00
把 connection 指针传到各个 package 里?
Flourite
2019-08-13 07:59:43 +08:00
@nomoon 这种方法也是麻烦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX