程序包开发,读简单配置文件 v1

服务计算Homework04

  • 项目地址
  • 使用说明:Watch文件夹存放路径为xx/github.com/Watch,直接运行main.go即可,注意将配置文件my.inimain.go放在同一目录下

任务目标

  • 熟悉程序包的编写习惯(idioms)和风格(convetions)
  • 熟悉 io 库操作
  • 使用测试驱动的方法
  • 简单 Go 程使用
  • 事件通知

任务内容

在 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

任务要求

  • 核心任务:包必须提供一个函数 Watch(filename,listener) (configuration, error)
    • 输入 filename 是配置文件名
    • 输入 listener 一个特殊的接口,用来监听配置文件是否被修改,让开发者自己决定如何处理配置变化
    • 输出 configuration 数据类型,可根据 key 读对应的 value。 key 和 value 都是字符串
    • 输出 error 是错误数据,如配置文件不存在,无法打开等
    • 可选的函数 WatchWithOption(filename,listener,...) (configuration, error)
  • 包必须包括以下内容:
    • 生成的中文 api 文档
    • 有较好的 Readme 文件,包括一个简单的使用案例
    • 每个go文件必须有对应的测试文件
    • 必须提供自定义错误
    • 使有 init 函数,使得 Unix 系统默认采用#作为注释行,Windows 系统默认采用 ; 作为注释行。

实现过程

1. 实现一个基础的读取ini文件

  • 打开文件,如果出错则直接返回
  • 读取文件内容并逐行查找键值对
  • 注意最后一行可能没有换行符,要做特殊处理
  • 返回存储键值对的configuration和自定义错误error
// 读取文件并返回ini的键值对和自定义错误类型
func readFile(filename string) (map[string]string, errorString) {
   
	// 打开文件
	var error errorString
	file, err := os.Open(filename)
	configuration := make(map[string]string)
	// 打开文件错误
	if err != nil {
   
		error = createErr("error1: failed to open the configuration file")
		return configuration, error
	} else {
   
		error = createErr("")
	}

	// 函数结束时关闭文件
	defer file.Close()
	// 读取文件内容
	reader := bufio.NewReader(file)
	for {
   
		// 读取一行文件
		linestr, err := reader.

你可能感兴趣的:(服务计算)