使用Go解析.ini配置文件格式的操作教程

Written by

in

文章目录
  • 使用 Go 语言解析一个 .ini 格式的配置文件,提取其中的键值对,并按 section 分类存储。
  • • 开发需要加载外部配置(如数据库、服务端口等)的小工具或服务 • 学习如何读取和解析结构化文本 • 简易配置系统的实现
  • • 文件读取与按行解析 • 字符串处理:去空格、分割、前缀判断 • map[string]map[string]string 多层结构 • 处理注释和空行
  • # 系统配置 [server] host = 127.0.0.1 port = 8080 [database] user = root password = 123456 dbname = testdb
  • package main import ( “bufio” “fmt” “os” “strings” ) func parseINI(filePath string) (map[string]map[string]string, error) { config := make(map[string]map[string]string) var currentSection string file, err := os.Open(filePath) if err != nil { return nil, err } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) // 忽略注释和空行 if line == “” || strings.HasPrefix(line, “#”) || strings.HasPrefix(line, “;”) { continue } // 处理 section if strings.HasPrefix(line, “[“) && strings.HasSuffix(line, “]”) { currentSection = strings.TrimSpace(line[1 : len(line)-1]) config[currentSection] = make(map[string]string) } else { // 处理 key=value parts := strings.SplitN(line, “=”, 2) if len(parts) == 2 && currentSection != “” { key := strings.TrimSpace(parts[0]) value := strings.TrimSpace(parts[1]) config[currentSection][key] = value } } } if err := scanner.Err(); err != nil { return nil, err } return config, nil } func main() { iniPath := “config.ini” config, err := parseINI(iniPath) if err != nil { fmt.Println(“解析失败:”, err) return } // 打印解析结果 for section, kv := range config { fmt.Println(“[” + section + “]”) for key, value := range kv { fmt.Printf(“%s = %sn”, key, value) } fmt.Println() } }
  • [server] host = 127.0.0.1 port = 8080 [database] user = root password = 123456 dbname = testdb
  • 功能 用法 去除空格 strings.TrimSpace() 判断开头结尾 strings.HasPrefix(), strings.HasSuffix() 分割键值对 strings.SplitN(str, "=", 2) 多层 map 存储结构 map[section]map[key]value
  • 通过本案例,你掌握了如何读取 .ini 配置文件并将其解析为结构化数据,是很多服务启动时加载配置的基础实践。 以上就是使用Go解析.ini配置文件格式的操作教程的详细内容,更多关于Go解析.ini文件格式的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: keras.utils.to_categorical和one hot格式解析 Django查询优化及ajax编码格式原理解析 使用Go语言解析动态JSON格式的方法 在Go语言程序中使用gojson来解析JSON格式文件 go解析svn log生成的xml格式的文件
  • 目录
    • 案例目标
    • 应用场景
    • 涉及知识点
    • 示例配置文件(config.ini)
    • 示例代码:简单 INI 文件解析器
    • 执行输出示例
    • 技术说明
    • 小结

    使用 Go 语言解析一个 .ini 格式的配置文件,提取其中的键值对,并按 section 分类存储。

    • • 开发需要加载外部配置(如数据库、服务端口等)的小工具或服务
    • • 学习如何读取和解析结构化文本
    • • 简易配置系统的实现

    • • 文件读取与按行解析
    • • 字符串处理:去空格、分割、前缀判断
    • • map[string]map[string]string 多层结构
    • • 处理注释和空行

    # 系统配置
    [server]
    host = 127.0.0.1
    port = 8080
    
    [database]
    user = root
    password = 123456
    dbname = testdb
    

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
        "strings"
    )
    
    func parseINI(filePath string) (map[string]map[string]string, error) {
        config := make(map[string]map[string]string)
        var currentSection string
    
        file, err := os.Open(filePath)
        if err != nil {
            return nil, err
        }
        defer file.Close()
    
        scanner := bufio.NewScanner(file)
    
        for scanner.Scan() {
            line := strings.TrimSpace(scanner.Text())
    
            // 忽略注释和空行
            if line == "" || strings.HasPrefix(line, "#") || strings.HasPrefix(line, ";") {
                continue
            }
    
            // 处理 section
            if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") {
                currentSection = strings.TrimSpace(line[1 : len(line)-1])
                config[currentSection] = make(map[string]string)
            } else {
                // 处理 key=value
                parts := strings.SplitN(line, "=", 2)
                if len(parts) == 2 && currentSection != "" {
                    key := strings.TrimSpace(parts[0])
                    value := strings.TrimSpace(parts[1])
                    config[currentSection][key] = value
                }
            }
        }
    
        if err := scanner.Err(); err != nil {
            return nil, err
        }
    
        return config, nil
    }
    
    func main() {
        iniPath := "config.ini"
        config, err := parseINI(iniPath)
        if err != nil {
            fmt.Println("解析失败:", err)
            return
        }
    
        // 打印解析结果
        for section, kv := range config {
            fmt.Println("[" + section + "]")
            for key, value := range kv {
                fmt.Printf("%s = %sn", key, value)
            }
            fmt.Println()
        }
    }
    

    [server]
    host = 127.0.0.1
    port = 8080
    
    [database]
    user = root
    password = 123456
    dbname = testdb
    

    功能 用法
    去除空格 strings.TrimSpace()
    判断开头结尾 strings.HasPrefix(), strings.HasSuffix()
    分割键值对 strings.SplitN(str, "=", 2)
    多层 map 存储结构 map[section]map[key]value

    通过本案例,你掌握了如何读取 .ini 配置文件并将其解析为结构化数据,是很多服务启动时加载配置的基础实践。

    以上就是使用Go解析.ini配置文件格式的操作教程的详细内容,更多关于Go解析.ini文件格式的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • keras.utils.to_categorical和one hot格式解析
    • Django查询优化及ajax编码格式原理解析
    • 使用Go语言解析动态JSON格式的方法
    • 在Go语言程序中使用gojson来解析JSON格式文件
    • go解析svn log生成的xml格式的文件

    站内搜索