我试图让一个简单的键值存储在一个go webserver应用程序中运行,它应该存储一些信息 .
问题是,我只能创建它的一个实例,因为它写入磁盘和文件夹是锁定的,所以我需要找到使用我的Web服务器访问键值存储 .
因此每个当前实例都可以访问它(读/写) . 我怎么做?
目前我的应用程序看起来像这样:https://play.golang.org/p/_SmGBZlP0Vi我想要使用的包是:https://github.com/peterbourgon/diskv
基本上我会在main之前创建一个实例并将键值存储的实例传递给rtt函数,但这似乎不可能在go中直接实现 . 或者我做错了什么?
1 回答
Global Conn Instance
首先使用键值存储的单个实例创建一个包,并使连接成为您连接一次的包变量,然后保持打开以供将来使用 . 这里有一些伪代码示例:
这样你就可以在任何地方使用"global"连接 . 只需在任何地方拨打
kvstore.Write(...)
即可写入商店 .同步并发访问
如果您的应用程序使用多个可以访问kvstore的goroutine(可能 - 取决于您使用的包是否已经为您执行此操作)需要同步访问权限 . 您可以使用互斥锁进行连接:
您还可以使用actor模式 . 这里有一篇由Peter Bourgon撰写的文章,解释了actor pattern . 使用actor模式,我们可以确保conn对象仅用于一个goroutine,因此不需要使用互斥锁 .
简单的kvstore包实现
kvstore的示例用法
只需将其复制到两个不同的文件夹中即可 . 有用 .