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 }