使用go写了一个简单ini解析器

时间:2021-06-07 04:25:02

打算用golang练下手,做个几百行代码的小项目

项目前的准备

ini的基本格式

INI文件由节、键、值组成。 


  [section]

参数(键
=值)
  name=value

注解
  注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

项目开发

项目目标

0 读取简单的ini 配置,不支持复杂的模式
1 读取ini配置文件
2 创建ini,并把ini配置写入文件

项目设计

1 确定数据结构,
k-v
注释,
2 读取整个文件
3 解析section
4 解析键值对
5 获取键值对数据,对类型进行转换
6 创建对应的键值对

功能细化

1 确认ini的结构
2 读取ini文件,解析ini
3 返回ini数据
3.1 删除或者修改section的数据
4 删除或者修改ini的数据
5 创建一个ini
6 新增一个值

todo
和其他解析器比较,优化和改进。

使用模块

package main

import (
"fmt"
"github.com/beckbikang/ini_config/config"
)

func main() {
t_iniconfig()
}

func t_iniconfig() {
cf, err := config.ParserConfig("./config_file/simple.conf", false)
if err != nil {
fmt.Println("get config faild")
return
}
//获取配置
fmt.Println(cf.GetConfig("global", "error_log"))
fmt.Println(cf.GetConfig("global", "log_level"))
fmt.Println(cf.GetConfig("global", "emergency_restart_threshold"))
fmt.Println(cf.GetConfig("global", "emergency_restart_interval"))
fmt.Println(cf.GetConfig("global", "process_control_timeout"))
fmt.Println(cf.GetConfig("global", "daemonize"))

//获取注释
fmt.Println(cf.GetConfigComment("global"))
fmt.Println(cf.GetConfigCommentData("global", "error_log"))

//将配置写入到新的文件
config.SaveConfigToFile(cf, "./config_file/simple_bak.conf")

cf, err = config.ParserConfig("./config_file/simple_bak.conf", false)
if err != nil {
fmt.Println("get config faild")
return
}

fmt.Println(cf.GetConfig("global", "error_log"))
fmt.Println(cf.GetConfig("global", "log_level"))
fmt.Println(cf.GetConfig("global", "emergency_restart_threshold"))
fmt.Println(cf.GetConfig("global", "emergency_restart_interval"))
fmt.Println(cf.GetConfig("global", "process_control_timeout"))
fmt.Println(cf.GetConfig("global", "daemonize"))

}

代码地址

https://github.com/beckbikang/ini_config