Golang实践录:读取ini配置文件

本文对 ini 文件进行解析。

概述

某Delphi项目需要做一些额外的配置,因为原本的配置文件是ini格式的,为不影响已有代码,而且delphi读取解析ini比较简单,考虑到兼容性,最终还是新建单独的ini配置文件并解析。为了对比数据一致性,除了Delphi工程外,还在另一golang工程实现相同的算法,所用的配置文件,完全相同。本文使用 Golang 解析 ini。

测试

github仓库在此下载:

go get gopkg.in/ini.v1

go mod vendor # 加入vendor

截取发文时,最新版本为v1.67.0

引入包,代码片段:

import (
	ini "gopkg.in/ini.v1"
)

配置文件config.ini文件内容:

# ini 测试样例

[section1]
sec1 = 110 210 ddd 99 | 133 135 1 2 1588 1509 | 310-410
sec2 = late \n lee | Jim Kent

[section2]
id   = 250
arrint = 1 | 2 | 3
arrstr = apple, apple2, apple3

测试代码:

package test

import (
	"fmt"
	"testing"

	"gopkg.in/ini.v1"
)

var (
	cfgFile string = "config.ini"
)

func TestIni(t *testing.T) {
	fmt.Println("test of ini...")
	// 加载
	cfg, err := ini.Load(cfgFile)
	if err != nil {
		fmt.Printf("Fail to read file: %v", err)
		return
	}

	// 读一节
	mySection := cfg.Section("section1")
	fmt.Println("keystrings:", mySection.KeyStrings())
	// 解析
	for _, key := range mySection.KeyStrings() {

		fmt.Printf("key: [%v]\nvalue: ", key)
		values := mySection.Key(key).Strings("|")
		for _, item := range values {
			fmt.Printf("[%v] ", item)
		}
		fmt.Printf("\n--------\n")
	}

	// 按单个字符串
	strVlaue := cfg.Section("section2").Key("id").Value()
	fmt.Printf("section2.id value: %v\n", strVlaue)

	// 数值,以"|"分隔
	arrVlaueInt := cfg.Section("section2").Key("arrint").ValidInts("|")
	fmt.Printf("section2.arrint value: %v\n", arrVlaueInt)

	// 字符串,以","分隔
	arrVlaueStr := cfg.Section("section2").Key("arrstr").Strings(",")
	fmt.Printf("section2.arrstr value: %v\n", arrVlaueStr)

	// 写入ini
	cfg.Section("").Key("name").SetValue("foobar")
	cfg.Section("info").Key("appVer").SetValue("1.3")
	cfg.Section("info").Key("author").SetValue("Late Lee")

	// 另起文件
	cfg.SaveTo("output.ini")
}

输出结果:

test of ini...
keystrings: [sec1 sec2]
key: [sec1]
value: [110 210 ddd 99] [133 135 1 2 1588 1509] [310-410]
--------
key: [sec2]
value: [late \n lee] [Jim Kent]
--------
section2.id value: 250
section2.arrint value: [1 2 3]
section2.arrstr value: [apple apple2 apple3]

新生成的文件output.ini内容:

name = foobar

# ini 测试样例
[section1]
sec1 = 110 210 ddd 99 | 133 135 1 2 1588 1509 | 310-410
sec2 = late \n lee | Jim Kent

[section2]
id     = 250
arrint = 1 | 2 | 3
arrstr = apple, apple2, apple3

[info]
appVer = 1.3
author = Late Lee

小结

除了维护有一定历史的工程外用到ini外,笔者一般会选择其它格式,因此测试代码较简单。就目前看,主要还是yaml。考虑到兼容性,也会用到xml。

你可能感兴趣的:(Golang,golang,xcode,开发语言)