go 写入yaml_[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)...
為了將我們寫好的Server發布到服務器上,就要將我們的代碼進行build打包,這樣如果以后想要修改一些代碼的話,需要重新給代碼進行編譯打包并上傳到服務器上。
顯然,這么做過于繁瑣。。。因此常見的做法都是將Server運行中可能會頻繁變更的變量、數值寫入配置文件中,這樣直接讓程序從配置文件讀取參數,避免對代碼頻繁的操作。
關于配置文件的格式,在這里推薦YAML 和XML~ XML是傳統的配置文件寫法,不過本人比較推薦yaml,他比XML要更加人性化,也更好寫,關于yaml的詳細信息可以參考:?yaml官網
比如我們可以將Server監聽的端口作為變量,寫入配置文件 config.yaml 和 config.xml,放入代碼的根目錄下,這樣當我們想要更換服務器端口的時候,只要在配置文件中修改port對應的值就可以拉。 config.xml內容如下:
GetConfig
THE
Information
HereIsTEST1
1024
Feature23333
config.yaml內容如下:
Address: 172.168.0.1
Config1: Easy
Config2:
Feature1: 2
Feature2: [3, 4]
Port: :6060
Config4: IS
Config5: ATest接下來就是解析他們了,目前golang官方還沒有解析yaml的庫,因此我推薦使用第三方的go-yaml包,
地址如下: ?go-yaml? ,go get安裝該包后,我們就可以通過他解析文件啦:
//解析文件,取出所有參數
func GetYamlConfig() map[interface{}]interface{}{
data, err := ioutil.ReadFile("config.yaml")
//將解析出的參數轉為map的形式
m := make(map[interface{}]interface{})
if err != nil {
LogErr("error: %v", err)
}
err = yaml.Unmarshal([]byte(data), &m)
return m
}
//根據需求取出對應值
func GetElement(key string,themap map[interface{}]interface{})string {
if value,ok:=themap[key];ok {
return value.(string)
}
LogErr("Can't find the *.yaml")
return ""
}
這里同樣給出解析xml配置文件的代碼:
func GetXMLConfig() map[string]string {
var t xml.Token
var err error
Keylst := make([]string,6)
Valuelst:=make([]string,6)
//將解析出的元素填入map中,便于查找
map1:=make(map[string]string)
content, err := ioutil.ReadFile("config.xml")
CheckError(err)
decoder := xml.NewDecoder(bytes.NewBuffer(content))
i:=0
j:=0
for t, err = decoder.Token(); err == nil; t, err = decoder.Token() {
switch token := t.(type) {
// 處理元素
case xml.StartElement:
name := token.Name.Local
Keylst[i]=string(name)
i=i+1
case xml.CharData:
content1 := string([]byte(token))
//Valuelst=append(Valuelst,content1)
Valuelst[j]=content1
j=j+1
}
}
for count:=0;count
map1[Keylst[count]]=Valuelst[count]
}
return map1
}
//取出map的函數跟yaml中的差不多,此處略過
運行效果如下:
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
有疑問加站長微信聯系(非本文作者)
總結
以上是生活随笔為你收集整理的go 写入yaml_[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql3.51 密码修改_mysql
- 下一篇: ios 主题切换 思路_iOS 使用 N