goProject/trunk/goutil/ini-config/ini.go

104 lines
1.9 KiB
Go
Raw Normal View History

2025-01-06 16:01:02 +08:00
package ini_config
import (
"bufio"
"errors"
"fmt"
"io"
"os"
"strings"
)
// ParseFile
// @description: 从文件读取配置文件并转化为map对象
// parameter:
// @filePath:文件路径
// return:
// @map[string]string: 配置信息
// @error:错误信息
func ParseFile(filePath string) (map[string]string, error) {
fn, err := os.Open(filePath)
if err != nil {
panic(err)
}
defer fn.Close()
kvMap := make(map[string]string)
rd := bufio.NewReader(fn)
for {
data, _, err := rd.ReadLine()
if err != nil || io.EOF == err {
break
}
line := strings.TrimSpace(string(data))
if line == "" || line[0:1] == "#" {
continue
}
var k string
var v string
k, v, err = Parse(line)
if err != nil {
return nil, err
}
kvMap[k] = v
}
return kvMap, nil
}
// Parse
// @description: 转换单行字符串为配置对象
// parameter:
// @line:单行内容
// return:
// @string:key
// @string:value
// @error:错误信息
func Parse(line string) (string, string, error) {
ls := strings.SplitN(line, "=", 2)
if len(ls) != 2 {
return "", "", errors.New(fmt.Sprintf("配置%s中未找到=分隔符", line))
}
var key = strings.TrimSpace(ls[0])
var value string
i := strings.LastIndex(ls[1], "#")
if i < 0 {
value = strings.TrimSpace(ls[1])
} else {
s := ls[1][:i]
value = strings.TrimSpace(s)
}
return key, value, nil
}
// ParseMultipleLines
// @description: 转换多行字符串为配置对象
// parameter:
// @content:多行内容(通过\n换行)
// return:
// @map[string]string:配置信息
// @error:错误信息
func ParseMultipleLines(content string) (map[string]string, error) {
lines := strings.Split(content, "\n")
kvMap := make(map[string]string)
for _, line := range lines {
if line == "" || line[0:1] == "#" {
continue
}
k, v, err := Parse(line)
if err != nil {
return nil, err
}
kvMap[k] = v
}
return kvMap, nil
}