返回介绍

高效读取配置信息

发布于 2023-06-25 22:01:52 字数 5051 浏览 0 评论 0 收藏 0

1.1.1. 开始使用

我们将通过一个非常简单的例子来了解如何使用。

首先,我们需要在任意目录创建两个文件(my.ini 和 main.go),在这里我们选择 /tmp/ini 目录。

    $ mkdir -p /tmp/ini
    $ cd /tmp/ini
    $ touch my.ini main.go
    $ tree .
    .
    ├── main.go
    └── my.ini

    0 directories, 2 files

现在,我们编辑 my.ini 文件并输入以下内容(部分内容来自 Grafana)。

    # possible values : production, development
    app_mode = development

    [paths]
    # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
    data = /home/git/grafana

    [server]
    # Protocol (http or https)
    protocol = http

    # The http port  to use
    http_port = 9999

    # Redirect to correct domain if host header does not match domain
    # Prevents DNS rebinding attacks
    enforce_domain = true

很好,接下来我们需要编写 main.go 文件来操作刚才创建的配置文件。

package main

import (
    "fmt"
    "os"

    "gopkg.in/ini.v1"
)

func main() {
    cfg, err := ini.Load("my.ini")
    if err != nil {
        fmt.Printf("Fail to read file: %v", err)
        os.Exit(1)
    }

    // 典型读取操作,默认分区可以使用空字符串表示
    fmt.Println("App Mode:", cfg.Section("").Key("app_mode").String())
    fmt.Println("Data Path:", cfg.Section("paths").Key("data").String())

    // 我们可以做一些候选值限制的操作
    fmt.Println("Server Protocol:",
        cfg.Section("server").Key("protocol").In("http", []string{"http", "https"}))
    // 如果读取的值不在候选列表内,则会回退使用提供的默认值
    fmt.Println("Email Protocol:",
        cfg.Section("server").Key("protocol").In("smtp", []string{"imap", "smtp"}))

    // 试一试自动类型转换
    fmt.Printf("Port Number: (%[1]T) %[1]d\n", cfg.Section("server").Key("http_port").MustInt(9999))
    fmt.Printf("Enforce Domain: (%[1]T) %[1]v\n", cfg.Section("server").Key("enforce_domain").MustBool(false))

    // 差不多了,修改某个值然后进行保存
    cfg.Section("").Key("app_mode").SetValue("production")
    cfg.SaveTo("my.ini.local")
}

运行程序,我们可以看下以下输出:

    $ go run main.go
    App Mode: development
    Data Path: /home/git/grafana
    Server Protocol: http
    Email Protocol: smtp
    Port Number: (int) 9999
    Enforce Domain: (bool) true

    $ cat my.ini.local
    # possible values : production, development
    app_mode = production

    [paths]
    # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
    data = /home/git/grafana
    ...

1.1.2. 高级用法

我写了一个demo如果需要可以下载 高级用法

这个只是这个包功能的很小一部分!如果想获取更多的功能可以查看官网文档

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文