如何在多个包之间共享单个数据库连接

By simon at 2018-02-28 • 0人收藏 • 54人看过

我有两个名为client和worker的包。我想分享相同的ssdb,mysql 和redis连接两个软件包。一米矿石类似的问题,我 我正面临着在这两个软件包之间共享认证。

app
  -> client pkg
  -> worker pkg
  main.go (contains auth as global variable)
任何人都可以请建议我最好的实现这两件事的方法?

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

有很多方法可以做到这一点,每种方法都有优点和缺点 真的取决于你在做什么。一个简单的方法这样做是为了拥有一个 第三个包含数据库连接的包,并从其他两个包导入 和主包装。

app
  -> client pkg // import "app/global"
  -> worker pkg // import "app/global"
  -> global pkg // Contains ssdb and auth as global variables
  main.go
另一种可能更好的方法取决于你在做什么 在client上有功能and worker软件包接受数据库 连接作为参数并从main.go初始化数据库并传递它 作为参数当你调用需要它的函数时。 这取决于你在做什么,但对于大项目来说,维护起来更容易 如果你只需要一个软件包来执行所有数据库操作,然后访问它 从所有你需要做的事情出发。那样你不必担心 关于这个问题,因为只有一个包需要担心数据库连接 即使有几个软件包使用它。 编辑: 全局变量的问题在于它们可以相同地进行修改 来自你项目的每一个地方的时间a它可以引入竞争条件,但是 当这不是问题时,使用它们没有任何问题。 在这种情况下,你是j当连接到数据库时,只需设置一次该值 然后只使用该对象。 你提到你想要另一个包auth的年龄,我推荐 拥有一个软件包,并拥有一切你需要从更多访问 比一个包裹,在这种情况下ssdb和auth。

登录后方可回帖

Loading...