Go语言实战案例-简单配置文件(INI格式)解析器(go 语言 gui)

Go语言实战案例-简单配置文件(INI格式)解析器(go 语言 gui)

以下是《Go语言100个实战案例》中的文件与IO操作篇 - 案例20:简单配置文件(INI格式)解析器的完整内容,适合入门学习如何用 Go 语言解析常见的 .ini 配置文件格式。

🎯 案例目标

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

🧩 应用场景

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

🧠 涉及知识点

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

🗂️ 示例配置文件(config.ini)# 系统配置[server]host = 127.0.0.1port = 8080[database]user = rootpassword = 123456dbname = testdb

💻 示例代码:简单 INI 文件解析器packagemainimport("bufio""fmt""os""strings")funcparseINI(filePathstring) (map[string]map[string]string,error) { config :=make(map[string]map[string]string)varcurrentSectionstringfile, err := os.Open(filePath)iferr !=nil{returnnil, err }deferfile.Close scanner := bufio.NewScanner(file)forscanner.Scan { line := strings.TrimSpace(scanner.Text)// 忽略注释和空行ifline ==""|| strings.HasPrefix(line,"#") || strings.HasPrefix(line,";") {continue}// 处理 sectionifstrings.HasPrefix(line,"[") && strings.HasSuffix(line,"]") { currentSection = strings.TrimSpace(line[1:len(line)-1]) config[currentSection] =make(map[string]string) }else{// 处理 key=valueparts := strings.SplitN(line,"=",2)iflen(parts) ==2&& currentSection !=""{ key := strings.TrimSpace(parts[0]) value := strings.TrimSpace(parts[1]) config[currentSection][key] = value } } }iferr := scanner.Err; err !=nil{returnnil, err }returnconfig,nil}funcmain { iniPath :="config.ini"config, err := parseINI(iniPath)iferr !=nil{ fmt.Println("解析失败:", err)return}// 打印解析结果forsection, kv :=rangeconfig { fmt.Println("["+ section +"]")forkey, value :=rangekv { fmt.Printf("%s = %s\n", key, value) } fmt.Println }}

📤 执行输出示例[server]host = 127.0.0.1port = 8080[database]user = rootpassword = 123456dbname = testdb

🛠 技术说明

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

🧪 拓展练习

  • • 支持注释中 # 和 ; 的双重格式
  • • 支持值为数字、布尔值的自动识别与转换
  • • 将解析结果导出为 JSON 文件
  • • 写一个配置查询函数:传入 section 和 key,返回 value

✅ 小结

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

猜你喜欢

拔出萝卜带出泥!49岁赵薇近况被曝,原来圈内封杀只是冰山一角(拔出萝卜带出泥的近义词)

从2001年起她就接连推出了多张个人专辑,更是获得过音乐风云榜的最受欢迎女歌手。甚至在后来解释时,张哲瀚也表示是自己对历史不够了解,但自己本身的这个行为并没有什么问题。 她的经历给了所有人一个警示:在光怪…

拔出萝卜带出泥!49岁赵薇近况被曝,原来圈内封杀只是冰山一角(拔出萝卜带出泥的近义词)

职业选手都在用的电竞平板:红魔电竞平板3 Pro全面解析(职业选手都在用的练枪软件)

与传统电竞平板相比,红魔电竞平板3 Pro的散热效率提升了65%,核心温度降低12℃,这使得它在长时间游戏场景中表现尤为突出。 红魔电竞平板3Pro预装了全新的REDMAGIC OS 10.5系统,这个经…

职业选手都在用的电竞平板:红魔电竞平板3 Pro全面解析(职业选手都在用的练枪软件)

告别繁琐排版,AI编辑器助你公众号创作效率飙升!(告别繁华锁住自己的心门是什么歌)

有一云AI编辑器利用先进的人工智能技术,不仅能够帮你完成基础创作,还能自动润色和扩展内容。 有一云AI编辑器的小程序支持全功能操作,让你可以随时随地编辑、排版、发布内容。无论你是教育行业的讲师,电商行业的营…

告别繁琐排版,AI编辑器助你公众号创作效率飙升!(告别繁华锁住自己的心门是什么歌)

DR佟玲教你眼周抗衰怎么选? 多层次、多维度科学逆龄,让眼神更年轻

眼周皮肤只有面部其他部位的13厚度,胶原蛋白极易流失,导致皱纹滋生、皮肤松弛。 针对泪沟、黑眼圈、眉眼间细纹的区域化填充,不仅能改善肤质,还能柔化眼神,呈现出自然、清新的年轻状态。真正理想的眼周填充抗衰,…

DR佟玲教你眼周抗衰怎么选? 多层次、多维度科学逆龄,让眼神更年轻

杨丽坤:“阿诗玛”精神失常后生下两个儿子,丈夫用一生怀念她

1970年,杨丽坤的朋友陈泽涛介绍她认识了唐凤楼。 随后,上影厂厂长徐桑楚也认识到,杨丽坤的遭遇与《阿诗玛》息息相关,电影的拍摄给她带来了巨大的伤害,因此,他为杨丽坤向上级报告,要求为她解决工资、户口等问题…

杨丽坤:“阿诗玛”精神失常后生下两个儿子,丈夫用一生怀念她