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 配置文件并将其解析为结构化数据,是很多服务启动时加载配置的基础实践。

特别声明:[Go语言实战案例-简单配置文件(INI格式)解析器(go 语言 gui)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

蓝牙音箱靠谱品牌推荐?来看看我们这家蓝牙音箱加工厂(蓝牙音箱哪家好?)

综上所述,深圳市道格拉斯科技有限公司作为蓝牙音箱领域的实力供应商,凭借自身强大的研发生产能力、独特的产品特点、高性价比的产品定位、良好的市场口碑以及丰富多样满足不同需求的产品线,为消费者提供了众多靠谱且好用…

蓝牙音箱靠谱品牌推荐?来看看我们这家蓝牙音箱加工厂(蓝牙音箱哪家好?)

架子鼓银发天团“鼓”动人生 乐享晚年新篇章(架子鼓手天一)

在云南昆明,有一支由退休阿姨组成的架子鼓团队,她们平均年龄超过65岁。这些阿姨们在鼓点中找到了属于自己的乐趣和活力。每天上午10点,在昆明市西山区春雨路937工业园区的“咚哒部落音乐工作室”里,都会响起节奏铿锵的鼓点声

架子鼓银发天团“鼓”动人生 乐享晚年新篇章(架子鼓手天一)

鱼跃血压计和欧姆龙血压计哪个好?家庭血压计哪个牌子的好(鱼跃血压计和欧姆龙血压计哪个好)

最近有人问我,鱼跃血压计和欧姆龙血压计哪个好?其实比品牌之前,大家更应该关心“家庭血压计哪个牌子的好”这个问题。这里就涉及到腕式和臂式的选择。理论上臂式更稳,姿势容易控制;腕式虽然小巧,但一旦高度没对齐心脏,…

鱼跃血压计和欧姆龙血压计哪个好?家庭血压计哪个牌子的好(鱼跃血压计和欧姆龙血压计哪个好)

实拍成群中华白海豚现身广东潮州海域(中华香烟白盒子多少一包)

成群中华白海豚现身广东潮州海域。9月14日下午,在广东省潮州市饶平县汛洲岛附近海域,成群结队的中华白海豚现身,在海中穿梭嬉戏。中华白海豚俗称妈祖鱼、粉红海豚或太平洋驼海豚,属『于海』豚科白海豚属,是海洋哺乳动物而非鱼类。其体型中等,通常体长2.

实拍成群中华白海豚现身广东潮州海域(中华香烟白盒子多少一包)

10元票价的撬动!青岛出品《洛桑的家事》主创人员谈如何诚意链接影迷(10元票据)

【重构版】当"小而美"重塑观影图景:从《洛桑的家事》看当代电影破局之道 当行业还在为30元最低票价争论时,《洛桑的家事》已在全国2000余家影院铺开早场特惠。正如张国栋所言:"我们记录的

10元票价的撬动!青岛出品《<strong>洛桑的家事</strong>》主创人员谈如何诚意链接影迷(10元票据)