【每日一库】超赞的 Go 语言 INI 文件操作

polaris · · 3062 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

如果你使用 INI 作为系统的配置文件,那么一定会使用这个库吧。没错,它就是号称地表 **最强大**、**最方便** 和 **最流行** 的 Go 语言 INI 文件操作库:<https://github.com/go-ini/ini>。 该项目的作者也是很多 Go 语言爱好者熟悉的无闻大师。讲真,文档都写的很好,很用心。官方网站:<https://ini.unknwon.io/> ![](https://s2.ax1x.com/2020/03/05/3HdOu8.png) ## 功能特性 - 支持覆盖加载多个数据源(`[]byte`、文件和 `io.ReadCloser`) - 支持递归读取键值 - 支持读取父子分区 - 支持读取自增键名 - 支持读取多行的键值 - 支持大量辅助方法 - 支持在读取时直接转换为 Go 语言类型 - 支持读取和 **写入** 分区和键的注释 - 轻松操作分区、键值和注释 - 在保存文件时分区和键值会保持原有的顺序 ## 下载安装 最低要求安装 Go 语言版本为 **1.6**。 ```sh $ go get -u gopkg.in/ini.v1 ``` ## 开始使用 我们将通过一个非常简单的例子来了解如何使用。 首先,我们需要在任意目录创建两个文件(`my.ini` 和 `main.go`),在这里我们选择 `/tmp/ini` 目录。 ```bash $ 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` 文件来操作刚才创建的配置文件。 ```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") } ``` 运行程序,我们可以看下以下输出: ```bash $ 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 ... ``` 完美!这个例子很简单,展示的也只是极其小部分的功能,想要完全掌握还需要多读多看,毕竟学无止境嘛。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3062 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传