代码改变世界

Go开源项目 - goconfig源代码浅析

2013-01-14 09:46  Danny.tian  阅读(3964)  评论(0编辑  收藏  举报

如果你还不知道怎么使用goconfig可以先看看 Go开源项目 - goconfig 使用方法.

config.go

goconfig的主文件, 首先定义了一些要是用的常量如"DEFAULT" section, 注释字符"#"和";", 分隔符":"或"=".

定义了boolString字典用于方法获取bool值时使用, "t","true","y","yes"都会被转换成true, "no","1","f","false","n","no","off","0会被转换成false.

    boolString = map[string]bool{
        "t":     true,
        "true":  true,
        "y":     true,
        "yes":   true,
        "on":    true,
        "1":     true,
        "f":     false,
        "false": false,
        "n":     false,
        "no":    false,
        "off":   false,
        "0":     false,
    }

下面是goconfig的主要的配置项结构:

type Config struct {
    comment   string
    separator string

    // === Sections 顺序
    lastIdSection int            // 最后一个Section的标示符
    idSection     map[string]int // Section位置

    // 最后的 option 标示符被用于每一个 section.
    lastIdOption map[string]int // Section最后的标示符

    // Section -> option : value
    data map[string]map[string]*tValue
}

// 存放输入位置和值.
type tValue struct {
    position int    // Option 顺序
    v        string //
}

section.go

  4个方法

  • AddSection - 添加section
  • RemoveSection - 移除section, 先删除section里面的所有option, 然后删除lastIdOption和idSection
  • HasSection - 是否存在相应的section
  • Sections - 返回一个可用的排序后的section列表

option.go

  4个方法

  • AddOption - 增加option
  • RemoveOption - 移除Option
  • HasOption - 是否存在对应的option
  • Options - 返回一个可用的option列表

type.go

5个方法:

  • Bool - 根据section和option的名称返回bool值.
  • Float - section和option的名称返回float值.
  • Int - section和option的名称返回int.
  • RawString - 根据section和option的名称返回对应的值.
  • String - String先调用RawString获得对应的值,然后根据_DEPTH_VALUES的值(默认200)循环匹配value中的变量,并返回最终解析好的value.

read.go和write.go

分别用于读取配置文件(调用ReadDefault方法,读取每行的option:vaule时,如果value中" ;", "\t;", " #", "\t#"等字符,会被截断)和生成配置文件(调用WriteFile方法).

error.go

自定义了sectionError和optionError错误信息, 分别用于提示没有找到section和没有找到option.

这个开源库比较简单, 大概过一下就明白了, 它是Revel开源框架的参数配置的基础模块.

 

至此结束.