beego/config包源码分析

Bryce · · 1818 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

从去年12月底开始接触golang,用过revel和beego框架。最后选择了beego,用beego的原因也很简单,因为beego是中国人开发的,有中文文档。

golang起源于C语言,虽然不支持面向对象编程,但还是提供了接口interface、匿名字段等方式。虽然进行面向对象编程还是有点别扭,但是好歹都能实现。这里借花献佛,介绍一下beego的config包,顺便提一下golang的面向对象编程。

config包的config.go文件定义了两个接口,ConfigContainerConfig,ConfigContainer定义了如何从原始数据里面获取配置信息的方法。Config接口是一个适配器,定义了把原始数据解析到ConfigContainer的方法。

config包里的其它文件是这两个接口的实现。xml文件夹实现了解析XML数据格式的方法,yaml文件夹实现了解析YAML格式的方法,ini和json分别解析INI格式和JSON格式。这里主要说一下INI格式的实现。

ini.go文件定义了两个结构体IniConfigContainerIniConfig,分别实现了上面的两个接口。golang接口的实现语法可以参考之前的文章《Golang 接口实现》。其中,IniConfigContainer不光实现了接口,还定义了内部变量来辅助实现。

filename       string
data           map[string]map[string]string // section=> key:val
sectionComment map[string]string            // section : comment
keyComment     map[string]string            // id: []{comment, key...}; id 1 is for main comment.
sync.RWMutex

data是用map实现的,用来保存配置文件的键值对。IniConfigContainer还有一个匿名对象sync.RWMutex,这是golang继承的语法,说明IniConfigContainer继承了同步锁,在这里用于互斥修改配置文件的值。config包和INI格式的实现可以参考下图。

IMG-THUMBNAIL


原文链接:beego/config包源码分析,转载请注明来源!


有疑问加站长微信联系(非本文作者)

本文来自:Cyeam

感谢作者:Bryce

查看原文:beego/config包源码分析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1818 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传