新聞中心
?gcfg?組件采用接口化設計,默認提供的是基于文件系統(tǒng)的接口實現。支持的數據文件格式包括: ?JSON/XML/YAML(YML)/TOML/INI?,項目中開發(fā)者可以靈活地選擇自己熟悉的配置文件格式來進行配置管理。

成都創(chuàng)新互聯服務項目包括通江網站建設、通江網站制作、通江網頁制作以及通江網絡營銷策劃等。多年來,我們專注于互聯網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯網行業(yè)的解決方案,通江網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到通江省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
配置文件
默認配置文件
配置對象我們推薦使用單例方式獲取,單例對象將會按照文件后綴?toml/yaml/yml/json/ini/xml?文自動檢索配置文件。默認情況下會自動檢索配置文件?config.toml/yaml/yml/json/ini/xml?并緩存,配置文件在外部被修改時將會自動刷新緩存。
如果想要自定義文件格式,可以通過?SetFileName?方法修改默認讀取的配置文件名稱(如:?default.yaml?, ?default.json?, ?default.xml?等等)。例如,我們可以通過以下方式讀取?default.yaml?配置文件中的數據庫?database?配置項。
// 設置默認配置文件,默認讀取的配置文件設置為 default.yaml
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("default.yaml")
// 后續(xù)讀取時將會讀取到 default.yaml 配置文件內容,
g.Cfg().Get("database")
默認文件修改
文件可以是一個具體的文件名稱或者完整的文件絕對路徑。
我們可以通過多種方式修改默認文件名稱:
- 通過配置管理方法?
SetFileName?修改。 - 修改命令行啟動參數 - ?
gf.gcfg.file?。 - 修改指定的環(huán)境變量 - ?
GF_GCFG_FILE?。
假如我們的執(zhí)行程序文件為?main?,那么可以通過以下方式修改配置管理器的配置文件目錄(?Linux?下):
1、通過單例模式
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("default.yaml")2、通過命令行啟動參數
./main --gf.gcfg.file=config.prod.toml3、通過環(huán)境變量(常用在容器中)
- 啟動時修改環(huán)境變量:
GF_GCFG_FILE=config.prod.toml; ./main
- 使用?
genv?模塊來修改環(huán)境變量:
genv.Set("GF_GCFG_FILE", "config.prod.toml")
配置目錄
目錄配置方法
?gcfg?配置管理器支持非常靈活的多目錄自動搜索功能,通過?SetPath?可以修改目錄管理目錄為唯一的目錄地址,同時,我們推薦通過?AddPath?方法添加多個搜索目錄,配置管理器底層將會按照添加目錄的順序作為優(yōu)先級進行自動檢索。直到檢索到一個匹配的文件路徑為止,如果在所有搜索目錄下查找不到配置文件,那么會返回失敗。
默認目錄配置
?gcfg?配置管理對象初始化時,默認會自動添加以下配置文件搜索目錄:
1、當前工作目錄及其下的?config?、?manifest/config?目錄:例如當前的工作目錄為?/home/www?時,將會添加:
- ?
/home/www? - ?
/home/www/config? - ?
/home/www/manifest/config?
2、當前可執(zhí)行文件所在目錄及其下的?config?、?manifest/config?目錄:例如二進制文件所在目錄為?/tmp?時,將會添加:
- ?
/tmp? - ?
/tmp/config? - ?
/tmp/manifest/config?
3、當前?main?源代碼包所在目錄及其下的?config?、?manifest/config?目錄(僅對源碼開發(fā)環(huán)境有效):例如?main?包所在目錄為?/home/john/workspace/gf-app?時,將會添加:
- ?
/home/john/workspace/gf-app? - ?
/home/john/workspace/gf-app/config? - ?
/home/john/workspace/gf-app/manifest/config?
默認目錄修改
注意這里修改的參數必須是一個目錄,不能是文件路徑。
我們可以通過以下方式修改配置管理器的配置文件搜索目錄,配置管理對象將會只在該指定目錄執(zhí)行配置文件檢索:
- 通過配置管理器的?
SetPath?方法手動修改; - 修改命令行啟動參數 - ?
gf.gcfg.path?; - 修改指定的環(huán)境變量 - ?
GF_GCFG_PATH?;
假如我們的執(zhí)行程序文件為?main?,那么可以通過以下方式修改配置管理器的配置文件目錄(?Linux?下):
1、通過單例模式
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetPath("/opt/config")2、通過命令行啟動參數
./main --gf.gcfg.path=/opt/config/3、通過環(huán)境變量(常用在容器中)
- 啟動時修改環(huán)境變量:
GF_GCFG_PATH=/opt/config/; ./main
- 使用?
genv?模塊來修改環(huán)境變量:
genv.Set("GF_GCFG_PATH", "/opt/config")
內容配置
?gcfg?包也支持直接內容配置,而不是讀取配置文件,常用于程序內部動態(tài)修改配置內容。通過以下包配置方法實現全局的配置:
func (c *AdapterFile) SetContent(content string, file ...string)
func (c *AdapterFile) GetContent(file ...string) string
func (c *AdapterFile) RemoveContent(file ...string)
func (c *AdapterFile) ClearContent()需要注意的是該配置是全局生效的,并且優(yōu)先級會高于讀取配置文件。因此,假如我們通過?SetContent("v = 1", "config.toml")?配置了?config.toml?的配置內容,并且也同時存在?config.toml?配置文件,那么只會使用到?SetContent?的配置內容,而配置文件內容將會被忽略。
層級訪問
在默認提供的文件系統(tǒng)接口實現下,?gcfg?組件支持按層級獲取配置數據,層級訪問默認通過英文?.?號指定,其中?pattern?參數和 通用編解碼?-gjson? 的?pattern?參數一致。例如以下配置(?config.yaml?):
server:
address: ":8199"
serverRoot: "resource/public"
database:
default:
link: "mysql:root:12345678@tcp(127.0.0.1:3306)/focus"
debug: true例如針對以上配置文件內容的層級讀?。?/p>
// :8199
g.Cfg().Get("server.address")
// true
g.Cfg().Get("database.default.debug")
注意事項
大家都知道,在GOlang里面,?map/slice?類型其實是一個”引用類型”(也叫”指針類型”),因此當你對這種類型的變量 鍵值對/索引項 進行修改時,會同時修改到其對應的底層數據。從效率上考慮,?gcfg?包某些獲取方法返回的數據類型為?map/slice?時,沒有對其做值拷貝,因此當你對返回的數據進行修改時,會同時修改?gcfg?對應的底層數據。
例如:
// For testing/example only.
content := `{"map":{"key":"value"}, "slice":[59,90]}`
gcfg.SetContent(content)
defer gcfg.RemoveContent()
m := g.Cfg().GetMap("map")
fmt.Println(m)
// Change the key-value pair.
m["key"] = "john"
// It changes the underlying key-value pair.
fmt.Println(g.Cfg().GetMap("map"))
s := g.Cfg().GetArray("slice")
fmt.Println(s)
// Change the value of specified index.
s[0] = 100
// It changes the underlying slice.
fmt.Println(g.Cfg().GetArray("slice"))
// output:
// map[key:value]
// map[key:john]
// [59 90]
// [100 90]
檢測更新
配置管理器使用了緩存機制,當配置文件第一次被讀取后會被緩存到內存中,下一次讀取時將會直接從緩存中獲取,以提高性能。同時,配置管理器提供了對配置文件的自動檢測更新機制,當配置文件在外部被修改后,配置管理器能夠即時地刷新配置文件的緩存內容。
當前標題:創(chuàng)新互聯GoFrame教程:GoFrame配置管理-文件配置
網頁路徑:http://m.fisionsoft.com.cn/article/djcehog.html


咨詢
建站咨詢
