Go读取json配置文件

Go语言内置的json为我们提供了读取json的方式,通过interface的方式进行读取。但是在编写项目时,通常将配置信息存储在json文件之中去,然后希望我们在项目中映射为结构体,通过.运算符方便获取到内容,而不是不断使用内置的json库进行读取对应的内容。
例如如下config.json文件:

例如我在访问该DbSettings.dbname的时候,我希望可以在go项目中直接对一个结构体Config实例(这里用conf表示)conf.Dbsettings.Dbname来表示。
尽管我们可以通过手写一个struct,然后将json文件内容映射到这个自定义的struct中去,读取后使用。但这样有一个问题,手写这样一些struct是一件令人恼火的事情,所以gojsonconfig这个库帮助你针对你的json文件生成一个对象,以便方便的获取相关的信息。

如何使用gojsonconfig这个包来创建并读取json文件内容?

生成存储Json文件的struct

  • 首先你的go项目应该是使用go mod进行管理。
  • 使用命令go mod -u "https://github.com/Pivot-Studio/gojsonconfig"获取该包。
  • 你可以使用gojsonconfig -v来检查是否成功安装,如果成功安装,则会显示如下内容:
    1
    2
    $ gojsonconfig -v
    v0.1
  • 在成功安装后,我们准备为你的项目生成结构体。在生成结构体时,你的项目需要满足如下条件
    • 当前路径下拥有一个config.json文件,该包将根据此json文件进行生成。
    • 当前路径下拥有一个models文件夹,该包会将该生成的文件存储在models文件夹中去。注意该包并不会为你自动创建models文件夹,所以请手动创建。
      总之,生成之前,你的文件结构应该是这样的:
    1
    2
    3
    4
    $-->cmd中你现在的位置
    |__config,json
    |__models(这是一个文件夹)
        |__(这里生成之前没有内容,即models是一个空文件夹)
  • 在确保上一步无误后,执行命令gojsonconfig -g,此时在models文件夹中会新生成一个文件Config_gen.go
    例如现在config.json内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {<!-- -->
      "DbSettings": {<!-- -->
        "host": "127.0.0.1",
        "port": 3306,
        "password":"123456",
        "dbname":"Demo"
      },
      "AesKey": "Here store a aes key"
    }

    你的项目结构如下:

    然后在命令行中输入gojsonconfig -g命令,执行后我们发现现在在models文件夹中有一个go文件:

    打开Config_gen.go文件,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package models

    type Dbsettings struct{<!-- -->
        Host string
        Port float64
        Password string
        Dbname string
    }
    type Config struct{<!-- -->
        AesKey string
        Dbsettings Dbsettings
    }

    这样存储json内容的struct就生成完毕。

读取struct并使用生成的结构体存储内容

你可以使用如下函数,对json文件进行读取。
你可以通过调用如下函数获取到之前针对json文件生成的实例了:

然后你就可以使用结构体实例(在上面的代码中为conf这个实例),通过.点运算符方便获取到json文件中的任何一项配置信息了。

<iframex id="Fu6gNmdR-1607533979773" src="//i2.wp.com/player.bilibili.com/player.html?aid=798068244" allowfullscreen="true" data-mediaembed="bilibili"></iframex>

Go语言读取Json配置文件