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

如果你还不知道怎么使用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开源框架的参数配置的基础模块.

 

至此结束.

你可能感兴趣的:(config)