go-ini

go-ini

发布于2020-11-09 03:56:07 UTC  4

简介

go-ini是go语言的一个功能强大的ini文件操作解析库,其前身为知名ini解析库goconfig,作者是“UnKnwon”。 官方文档:https://ini.unknwon.io/docs

安装go-ini

go-ini要求安装Go 1.6以上版本 通过go mod获取:

$ go get gopkg.in/ini.v1

基础用法

ini文件格式分为四个部分:分区(Section)、键(Key)、值(Value)、注释(Comment).

# I am Comment
; I am Comment too
[Section]
Key1 = value1
Key2 = value2
Key3 = value3
List = v1,v2

操作ini文件

package main

import (
    "fmt"

    "gopkg.in/ini.v1"
)

func main(){
    cfg, err := ini.Load("my.ini")
    if nil != err {
        fmt.Printf("Fail to load config: %v", err)
        return
    }

    //基础读取操作
    fmt.Println("Key1:", cfg.Section("Section").Key("Key1").String))

    //限定候选值的范围,不在候选列表则使用默认值
    fmt.Println("Candidate or Default:",
        cfg.Section("Section").Key("Key2").In("Default", []string{"candidate1", "candidate2"}))

    //修改某个值并保存
    cfg.Section("Section").Key("Key3").SetValue("miao")
    cfg.SaveTo("miao.ini")
}

结构体与分区双向映射

将配置文件映射到结构体后可以更方便地操作数据, 如果属性名与分区或键不对应,可在tag中使用ini:"xx"解析别名

# cube.ini
Comment = Cube info ini

[Rubik]
Name = 333
Record = 3.47
Time = 2018-11-24T15:04:05Z

[CubingChina]
Name = 粗饼网
Url = https://www.cubingchina.com
Age = 6
Official = true
type Rubik struct{
    Name            string
    WorldRecord     float64     `ini:"Record"`
    Time            time.Time
}

type CubingChina struct{
    Name        string
    Url         string
    Age         int64
    Official    bool
}

type Cube struct{
    Comment     string
    Rubik       Rubik
    CubingChina CubingChina
}

func main(){
    cfg, err := ini.Load("cube.ini")
    cube := new(Cube)

    //cfg中的配置映射到cube中
    err = cfg.MapTo(cube)

    //从配置文件映射到cube中
    err = ini.MapTo(cube, "cube.ini")

    //只映射一个分区
    rubik := new(Rubik)
    err = cfg.Section("Rubik").MapTo(rubik)

    //修改配置对象的值并存入文件
    cube.Rubik.Name = "Rubik's Cube"
    cfg := ini.Empty()
    err = ini.ReflectFrom(cfg, cube)
    cfg.SaveTo("new_cube.ini")
}

以上为go-ini的基础操作用法,更多详细用法与高级用法请参考官方文档

评论

共有 3 条评论

  • 罗觉觉
    罗觉觉

    <script>alert('a')</script>

    2020-12-22 07:46:55 UTC回复
    鱼翅不吃鱼.
    鱼翅不吃鱼.XSS当场抓获2020-12-28 07:27:02 UTC回复

  • 鱼翅不吃鱼.
    鱼翅不吃鱼.

    火前留名

    2020-11-22 09:39:07 UTC回复

  • 作者的其他博客

    • go-ini
      4人阅读 1人喜欢