如何在 Go 中管理文件内的状态?
How to I manage state inside a file in Go?
很难承认,但我很难在我的 cli go 应用程序中管理状态。我基本上想要的是管理一个对象列表及其在磁盘文件中的属性。我希望能够添加对象及其属性,更新对象 and/or 它们的属性并在需要时删除它们。
我认为拥有一个 yml 或 json 文件并使用某种库对其进行编辑会很容易,但对于像我这样的 go 初学者来说,这似乎比应该做的要难。
示例如下 json 结构。
{
"servers":
[
{ "hostname": "gandalf", "ip": "192.168.1.10", "color": "red" },
{ "hostname": "bilbo", "ip": "192.168.1.11", "color": "blue" },
{ "hostname": "frodo", "ip": "192.168.1.12", "color": "yellow" }
]
}
现在我希望能够添加、删除和编辑服务器。不一定是json,yaml也可以。
你们有没有关于如何做到这一点的建议(库和示例)?我已经尝试过 Viper 但添加新对象甚至编辑现有对象似乎都是不可能的。
对于需要人类可读且主要由人类编辑的设置,yaml
或 json
文件似乎没问题。
如果状态是由程序本身写入和读取的,而一个完整的数据库似乎有点过分,那么我会使用基于文件的数据库。如果数据需要更多结构,可能是一个简单的 key/value 存储,如 boltdb
或 sqlite
。
我个人在这种情况下使用boltdb,因为它非常轻巧,速度超快,我喜欢它的简单性。
-- 编辑--
将json
作为文件结构,问题是您每次都需要写入和读取整个文件。编辑将是读取整个文件,解组 json,更改解组对象中的某些内容,将其编组回 json 并再次写入整个文件。
这就是为什么我只将它用于程序在启动时读取一次的设置,仅此而已。
很难承认,但我很难在我的 cli go 应用程序中管理状态。我基本上想要的是管理一个对象列表及其在磁盘文件中的属性。我希望能够添加对象及其属性,更新对象 and/or 它们的属性并在需要时删除它们。
我认为拥有一个 yml 或 json 文件并使用某种库对其进行编辑会很容易,但对于像我这样的 go 初学者来说,这似乎比应该做的要难。
示例如下 json 结构。
{
"servers":
[
{ "hostname": "gandalf", "ip": "192.168.1.10", "color": "red" },
{ "hostname": "bilbo", "ip": "192.168.1.11", "color": "blue" },
{ "hostname": "frodo", "ip": "192.168.1.12", "color": "yellow" }
]
}
现在我希望能够添加、删除和编辑服务器。不一定是json,yaml也可以。
你们有没有关于如何做到这一点的建议(库和示例)?我已经尝试过 Viper 但添加新对象甚至编辑现有对象似乎都是不可能的。
对于需要人类可读且主要由人类编辑的设置,yaml
或 json
文件似乎没问题。
如果状态是由程序本身写入和读取的,而一个完整的数据库似乎有点过分,那么我会使用基于文件的数据库。如果数据需要更多结构,可能是一个简单的 key/value 存储,如 boltdb
或 sqlite
。
我个人在这种情况下使用boltdb,因为它非常轻巧,速度超快,我喜欢它的简单性。
-- 编辑--
将json
作为文件结构,问题是您每次都需要写入和读取整个文件。编辑将是读取整个文件,解组 json,更改解组对象中的某些内容,将其编组回 json 并再次写入整个文件。
这就是为什么我只将它用于程序在启动时读取一次的设置,仅此而已。