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開源框架的參數配置的基礎模塊.

 

至此結束.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM