如何在Go中管理文件内的状态?

时间:2018-03-17 12:25:47

标签: json go yaml configuration-files

很难承认,但我很难在我的cli go app中管理状态。我基本上想要的是在磁盘上的文件中管理具有其属性的对象列表。我希望能够添加具有属性的对象,更新对象和/或其属性,并在需要时删除它们。

我认为只是拥有一个yml或json文件并使用某种类型的库进行编辑会很容易,但对于像我这样的初学者来说它似乎比它应该更难。

一个例子是以下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但是添加新对象甚至编辑现有对象似乎是不可能的。

1 个答案:

答案 0 :(得分:1)

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

如果状态是由程序本身编写和读取的,并且完整的数据库似乎过度,那么我将使用基于文件的数据库。如果数据需要更多结构,可能是一个简单的键/值存储,如boltdbsqlite

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

- 编辑 -

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

这就是为什么我只会将它用于程序在启动时读取的设置以及它的原因。