ini配置文件读取程序包开发
一、概述
配置文件(Configuration File,CF)是一种文本文档,为计算机系统或程序配置参数和初始设置。传统的配置文件就是文本行,在
Unix 系统中随处可见,通常使用 .conf,.config,.cfg 作为后缀,并逐步形成了 key = value 的配置习惯。在
Windows 系统中添加了对 section 支持,通常用 .ini
作为后缀。面向对象语言的兴起,程序员需要直接将文本反序列化成内存对象作为配置,逐步提出了一些新的配置文件格式,包括
JSON,YAML,TOML 等。
二、课程任务
1、任务目标
- 熟悉程序包的编写习惯(idioms)和风格(convetions)
- 熟悉 io 库操作
- 使用测试驱动的方法
- 简单 Go 程使用
- 事件通知
2、任务内容
在 Gitee 或 GitHub 上发布一个读配置文件程序包,第一版仅需要读 ini 配置,配置文件格式案例:
# possible values : production, development
app_mode = development
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /home/git/grafana
[server]
# Protocol (http or https)
protocol = http
# The http port to use
http_port = 9999
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true
3、任务要求
- 核心任务:包必须提供一个函数
Watch(filename,listener) (configuration, error)
-
输入 filename 是配置文件名
-
输入 listener 一个特殊的接口,用来监听配置文件是否被修改,让开发者自己决定如何处理配置变化
type ListenFunc func(string)
type inteface Listener { listen(inifile string) }
ListenFunc
实现接口方法listen
直接调用函数- 优点
- 所有满足签名的函数、方法都可以作为参数
- 所有实现 Listener 接口的数据类型都可作为参数
-输出 configuration 数据类型,可根据 key 读对应的 value。 key 和 value 都是字符串
-
输出 error 是错误数据,如配置文件不存在,无法打开等
可选的函数WatchWithOption(filename,listener,...) (configuration, error)
-
- 包必须包括以下内容:
- 生成的中文 api 文档
- 有较好的 Readme 文件,包括一个简单的使用案例
- 每个go文件必须有对应的测试文件
- 必须提供自定义错误
- 使有 init 函数,使得 Unix 系统默认采用 # 作为注释行,Windows 系统默认采用 ; 作为注释行。
- 不能使用第三方包,但可以参考、甚至复制它们的代码。
三、函数设计
1、核心函数Watch
Watch函数的设计要求是通过配置文件名和监听接口读取文件,然后返回对应的配置信息和错误信息。
func Watch(filename string, listener Listener) (map[string]string, error){
//调用监听接口
listener.listen(filename)
config := make(map[string]string)
f, err := os.Open(filename)
if err != nil {
panic(err)
}
//读取ini配置文件的信息
r := bufio.NewReader(f)
for{
b, _, err := r.ReadLine