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

时间:2025-02-26 07:39:49

本文对 ini 文件进行解析。

概述

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

测试

github仓库在此下载:

go get /ini.v1

go mod vendor # 加入vendor

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

引入包,代码片段:

import (
	ini "/ini.v1"
)

配置文件文件内容:

# 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"

	"/ini.v1"
)

var (
	cfgFile string = ""
)

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

	// 读一节
	mySection := ("section1")
	("keystrings:", ())
	// 解析
	for _, key := range () {

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

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

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

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

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

	// 另起文件
	("")
}

输出结果:

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]
--------
 value: 250
 value: [1 2 3]
 value: [apple apple2 apple3]

新生成的文件内容:

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。