104 lines
1.9 KiB
Go
104 lines
1.9 KiB
Go
|
|
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
|
|||
|
|
}
|