go语言之读配置文件程序包开发

本文档介绍了如何使用Go语言开发一个读取配置文件的程序包,包括核心函数Watch、监听接口Listener、初始化函数init、获取修改时间的函数GetModificationTime以及配置信息打印函数PrintValue的设计和测试。此外,还提到了自定义错误处理和中文API的生成。
摘要由CSDN通过智能技术生成

一、概述

配置文件(Configuration File,CF)是一种文本文档,为计算机系统或程序配置参数和初始设置。传统的配置文件就是文本行,在
Unix 系统中随处可见,通常使用 .conf,.config,.cfg 作为后缀,并逐步形成了 key = value 的配置习惯。在
Windows 系统中添加了对 section 支持,通常用 .ini
作为后缀。面向对象语言的兴起,程序员需要直接将文本反序列化成内存对象作为配置,逐步提出了一些新的配置文件格式,包括
JSON,YAML,TOML 等。

二、课程任务

1、任务目标

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

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、任务要求

  1. 核心任务:包必须提供一个函数 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)

  2. 包必须包括以下内容:
    • 生成的中文 api 文档
    • 有较好的 Readme 文件,包括一个简单的使用案例
    • 每个go文件必须有对应的测试文件
    • 必须提供自定义错误
    • 使有 init 函数,使得 Unix 系统默认采用 # 作为注释行,Windows 系统默认采用 ; 作为注释行。
  3. 不能使用第三方包,但可以参考、甚至复制它们的代码。

三、函数设计

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值