日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame配置管理-文件配置

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

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括通江網(wǎng)站建設(shè)、通江網(wǎng)站制作、通江網(wǎng)頁(yè)制作以及通江網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,通江網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到通江省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

配置文件

默認(rèn)配置文件

配置對(duì)象我們推薦使用單例方式獲取,單例對(duì)象將會(huì)按照文件后綴?toml/yaml/yml/json/ini/xml?文自動(dòng)檢索配置文件。默認(rèn)情況下會(huì)自動(dòng)檢索配置文件?config.toml/yaml/yml/json/ini/xml?并緩存,配置文件在外部被修改時(shí)將會(huì)自動(dòng)刷新緩存。

如果想要自定義文件格式,可以通過(guò)?SetFileName?方法修改默認(rèn)讀取的配置文件名稱(如:?default.yaml?, ?default.json?, ?default.xml?等等)。例如,我們可以通過(guò)以下方式讀取?default.yaml?配置文件中的數(shù)據(jù)庫(kù)?database?配置項(xiàng)。

// 設(shè)置默認(rèn)配置文件,默認(rèn)讀取的配置文件設(shè)置為 default.yaml
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("default.yaml")

// 后續(xù)讀取時(shí)將會(huì)讀取到 default.yaml 配置文件內(nèi)容,
g.Cfg().Get("database")

默認(rèn)文件修改

文件可以是一個(gè)具體的文件名稱或者完整的文件絕對(duì)路徑。

我們可以通過(guò)多種方式修改默認(rèn)文件名稱:

  1. 通過(guò)配置管理方法?SetFileName?修改。
  2. 修改命令行啟動(dòng)參數(shù) - ?gf.gcfg.file?。
  3. 修改指定的環(huán)境變量 - ?GF_GCFG_FILE?。

假如我們的執(zhí)行程序文件為?main?,那么可以通過(guò)以下方式修改配置管理器的配置文件目錄(?Linux?下):

1、通過(guò)單例模式

g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("default.yaml")

2、通過(guò)命令行啟動(dòng)參數(shù)

 ./main --gf.gcfg.file=config.prod.toml

3、通過(guò)環(huán)境變量(常用在容器中)

  • 啟動(dòng)時(shí)修改環(huán)境變量:
  GF_GCFG_FILE=config.prod.toml; ./main
  • 使用?genv?模塊來(lái)修改環(huán)境變量:
  genv.Set("GF_GCFG_FILE", "config.prod.toml")

配置目錄

目錄配置方法

?gcfg?配置管理器支持非常靈活的多目錄自動(dòng)搜索功能,通過(guò)?SetPath?可以修改目錄管理目錄為唯一的目錄地址,同時(shí),我們推薦通過(guò)?AddPath?方法添加多個(gè)搜索目錄,配置管理器底層將會(huì)按照添加目錄的順序作為優(yōu)先級(jí)進(jìn)行自動(dòng)檢索。直到檢索到一個(gè)匹配的文件路徑為止,如果在所有搜索目錄下查找不到配置文件,那么會(huì)返回失敗。

默認(rèn)目錄配置

?gcfg?配置管理對(duì)象初始化時(shí),默認(rèn)會(huì)自動(dòng)添加以下配置文件搜索目錄:

1、當(dāng)前工作目錄及其下的?config?、?manifest/config?目錄:例如當(dāng)前的工作目錄為?/home/www?時(shí),將會(huì)添加:

  • ?/home/www ?
  • ?/home/www/config ?
  • ?/home/www/manifest/config ?

2、當(dāng)前可執(zhí)行文件所在目錄及其下的?config?、?manifest/config?目錄:例如二進(jìn)制文件所在目錄為?/tmp?時(shí),將會(huì)添加:

  • ?/tmp ?
  • ?/tmp/config ?
  • ?/tmp/manifest/config ?

3、當(dāng)前?main?源代碼包所在目錄及其下的?config?、?manifest/config?目錄(僅對(duì)源碼開(kāi)發(fā)環(huán)境有效):例如?main?包所在目錄為?/home/john/workspace/gf-app?時(shí),將會(huì)添加:

  • ?/home/john/workspace/gf-app ?
  • ?/home/john/workspace/gf-app/config ?
  • ?/home/john/workspace/gf-app/manifest/config?

默認(rèn)目錄修改

注意這里修改的參數(shù)必須是一個(gè)目錄,不能是文件路徑。

我們可以通過(guò)以下方式修改配置管理器的配置文件搜索目錄,配置管理對(duì)象將會(huì)只在該指定目錄執(zhí)行配置文件檢索:

  1. 通過(guò)配置管理器的?SetPath?方法手動(dòng)修改;
  2. 修改命令行啟動(dòng)參數(shù) - ?gf.gcfg.path?;
  3. 修改指定的環(huán)境變量 - ?GF_GCFG_PATH?;

假如我們的執(zhí)行程序文件為?main?,那么可以通過(guò)以下方式修改配置管理器的配置文件目錄(?Linux?下):

1、通過(guò)單例模式

g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetPath("/opt/config")

2、通過(guò)命令行啟動(dòng)參數(shù)

 ./main --gf.gcfg.path=/opt/config/

3、通過(guò)環(huán)境變量(常用在容器中)

  • 啟動(dòng)時(shí)修改環(huán)境變量:
  GF_GCFG_PATH=/opt/config/; ./main
  • 使用?genv?模塊來(lái)修改環(huán)境變量:
  genv.Set("GF_GCFG_PATH", "/opt/config")

內(nèi)容配置

?gcfg?包也支持直接內(nèi)容配置,而不是讀取配置文件,常用于程序內(nèi)部動(dòng)態(tài)修改配置內(nèi)容。通過(guò)以下包配置方法實(shí)現(xiàn)全局的配置:

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)先級(jí)會(huì)高于讀取配置文件。因此,假如我們通過(guò)?SetContent("v = 1", "config.toml")?配置了?config.toml?的配置內(nèi)容,并且也同時(shí)存在?config.toml?配置文件,那么只會(huì)使用到?SetContent?的配置內(nèi)容,而配置文件內(nèi)容將會(huì)被忽略。

層級(jí)訪問(wèn)

在默認(rèn)提供的文件系統(tǒng)接口實(shí)現(xiàn)下,?gcfg?組件支持按層級(jí)獲取配置數(shù)據(jù),層級(jí)訪問(wèn)默認(rèn)通過(guò)英文?.?號(hào)指定,其中?pattern?參數(shù)和 通用編解碼?-gjson? 的?pattern?參數(shù)一致。例如以下配置(?config.yaml?):

server:
  address:    ":8199"
  serverRoot: "resource/public"

database:
  default:
    link:   "mysql:root:12345678@tcp(127.0.0.1:3306)/focus"
    debug:  true

例如針對(duì)以上配置文件內(nèi)容的層級(jí)讀?。?/p>

// :8199
g.Cfg().Get("server.address")

// true
g.Cfg().Get("database.default.debug")

注意事項(xiàng)

大家都知道,在GOlang里面,?map/slice?類(lèi)型其實(shí)是一個(gè)”引用類(lèi)型”(也叫”指針類(lèi)型”),因此當(dāng)你對(duì)這種類(lèi)型的變量 鍵值對(duì)/索引項(xiàng) 進(jìn)行修改時(shí),會(huì)同時(shí)修改到其對(duì)應(yīng)的底層數(shù)據(jù)。從效率上考慮,?gcfg?包某些獲取方法返回的數(shù)據(jù)類(lèi)型為?map/slice?時(shí),沒(méi)有對(duì)其做值拷貝,因此當(dāng)你對(duì)返回的數(shù)據(jù)進(jìn)行修改時(shí),會(huì)同時(shí)修改?gcfg?對(duì)應(yīng)的底層數(shù)據(jù)。

例如:

// 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]

檢測(cè)更新

配置管理器使用了緩存機(jī)制,當(dāng)配置文件第一次被讀取后會(huì)被緩存到內(nèi)存中,下一次讀取時(shí)將會(huì)直接從緩存中獲取,以提高性能。同時(shí),配置管理器提供了對(duì)配置文件的自動(dòng)檢測(cè)更新機(jī)制,當(dāng)配置文件在外部被修改后,配置管理器能夠即時(shí)地刷新配置文件的緩存內(nèi)容。


當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame配置管理-文件配置
文章轉(zhuǎn)載:http://www.5511xx.com/article/djcehog.html