Golang读取配置文件(*.ini)信息

package main

import (
	"fmt"
	"io/ioutil"
	"regexp"
	"strings"
)

func checkErr(e error) {
	if e != nil {
		panic(e)
	}
}

/*
函数名:getCfg(tag string, cfg string)string
参  数:tag string:参数的名称
	  cfg string:配置信息字符串
返回值:string:从配置信息"cfg"中查询到的第一个tag参数的配置值
创建时间:2018年12月3日
修订信息:
*/
func getCfg(tag string, filepath string) string {
	dat, err := ioutil.ReadFile(filepath) //读取文件
	checkErr(err)                         //检查是否有错误
	cfg := string(dat)                    //将读取到达配置文件转化为字符串
	var str string
	s1 := fmt.Sprintf("[^;]%s *= *.{1,}\\n", tag)
	s2 := fmt.Sprintf("%s *= *", tag)
	reg, err := regexp.Compile(s1)
	if err == nil {
		tag_str := reg.FindString(cfg) //在配置字符串中搜索
		if len(tag_str) > 0 {
			r, _ := regexp.Compile(s2)
			i := r.FindStringIndex(tag_str) //查找配置字符串的确切起始位置
			var h_str = make([]byte, len(tag_str)-i[1])
			copy(h_str, tag_str[i[1]:])
			str1 := fmt.Sprintln(string(h_str))
			str2 := strings.Replace(str1, "\n", "", -1)
			str = strings.Replace(str2, "\r", "", -1)
		}
	}
	return str
}

func main() {
	fmt.Println(getCfg("db1.Host", "demo.ini")) //输出:127.0.0.0
}

测试对应的配置文件

[mysql]
db1.Name = testMysqlDB
db1.Host = 127.0.0.1
db1.Port = 3306
db1.User = root
db1.Pwd = test
db1.colname  = ID:int,DataTime:string,DocTagName:string,DocValue:float64
; 测试INI风格的注释
; 这两行数据的前前面加入了分号,因此,这些数据被认为是注释,将不会影响配置文件正常情况

[tcp]
Port=   3309

 

你可能感兴趣的:(Golang)