如何在 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 但添加新对象甚至编辑现有对象似乎都是不可能的。

对于需要人类可读且主要由人类编辑的设置,yamljson 文件似乎没问题。

如果状态是由程序本身写入和读取的,而一个完整的数据库似乎有点过分,那么我会使用基于文件的数据库。如果数据需要更多结构,可能是一个简单的 key/value 存储,如 boltdbsqlite

我个人在这种情况下使用boltdb,因为它非常轻巧,速度超快,我喜欢它的简单性。

-- 编辑--

json作为文件结构,问题是您每次都需要写入和读取整个文件。编辑将是读取整个文件,解组 json,更改解组对象中的某些内容,将其编组回 json 并再次写入整个文件。

这就是为什么我只将它用于程序在启动时读取一次的设置,仅此而已。