[Golang] 从零開始写Socket Server(4):将执行參数放入配置文件(XML/YAML)
为了将我们写好的Server公布到server上。就要将我们的代码进行build打包。这样假设以后想要改动一些代码的话。须要又一次给代码进行编译打包并上传到server上。
显然,这么做过于繁琐。
。。因此常见的做法都是将Server执行中可能会频繁变更的变量、数值写入配置文件里。这样直接让程序从配置文件读取參数,避免对代码频繁的操作。
关于配置文件的格式,在这里推荐YAML 和XML~ XML是传统的配置文件写法,只是本人比較推荐yaml,他比XML要更加人性化,也更好写,关于yaml的具体信息能够參考: yaml官网
比方我们能够将Server监听的port作为变量,写入配置文件 config.yaml 和 config.xml,放入代码的根文件夹下。这样当我们想要更换serverport的时候。仅仅要在配置文件里改动port相应的值就能够拉。 config.xml内容例如以下:
<?xml version="1.0" encoding="UTF-8"?>
<Config1>GetConfig</Config1>
<Config2>THE</Config2>
<Config3>Information</Config3>
<Feature1>HereIsTEST1</Feature1>
<Feature2>1024</Feature2>
<Feature3>Feature23333</Feature3>
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<len(Keylst);count++{
map1[Keylst[count]]=Valuelst[count]
} return map1
}
//取出map的函数跟yaml中的几乎相同,此处略过
执行效果例如以下:
我已经把SocketServer系列的代码整合到了一起,公布到了我个人的github上:点击链接。 希望大家有兴趣的能够学习star一下~
[Golang] 从零開始写Socket Server(4):将执行參数放入配置文件(XML/YAML)的更多相关文章
- [Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更 ...
- [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
在上一章我们做出来一个最基础的demo后,已经能够初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议.从而增强整个信息交 ...
- 《从零開始搭建游戏server》项目公布到Linux环境
前言: 之前我们提及了怎样使用Maven来创建.管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,如今我们就開始将我们之前开发的项目demo公布到Linux环境下.并让它正常执行起 ...
- 从零開始写游戏引擎(一) - project创建以及文件夹设置还有版本号控制
一句话提要 好的開始等于成功了一半. 创建文件夹结构 project文件夹下最好分为以下几个文件夹 Docs - 开发文档,设计文档 Assets - 角色,动作,模型和音效等 Source - 代码 ...
- 从零開始怎么写android native service?
从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...
- 从零開始学习OpenCL开发(一)架构
多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...
- # 从零開始搭建Hadoop2.7.1的分布式集群
Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...
- Bmob移动后端云服务平台--Android从零開始--(二)android高速入门
Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
随机推荐
- P1562 还是N皇后
P1562 还是N皇后原来,就会位运算搞八皇后,当复习一下.可行的位置是1,其他是0比如11011到下一行的时候,对应的左斜线和右斜线要移一位 #include<iostream> #in ...
- [漏洞分析]thinkphp 5.1.25 insert、insetAll、update方法注入
0x00 前言 这个洞,早在9月29号的时候我提交给先知,那时候tp还是5.1.25的版本,天还很蓝,我也还很年轻.时至今日这个洞依旧没有审核,而tp在这期间都已经更新到了5.1.29.在最近我去跟踪 ...
- 每日踩坑 2019-04-09 Web.config configuration 蓝色波浪线 未声明 configuration 标签的解决办法
百度看了几篇答案都没有给出解决方案,看了看 MSDN. https://docs.microsoft.com/zh-cn/previous-versions/ms228147(v=vs.110) 似乎 ...
- luogu P2934 [USACO09JAN]安全出行Safe Travel
题目链接 luogu P2934 [USACO09JAN]安全出行Safe Travel 题解 对于不在最短路树上的边(x, y) 1 | | t / \ / \ x-----y 考虑这样一种形态的图 ...
- Python解释数学系列——分位数Quantile
跳转到我的博客 1. 分位数计算案例与Python代码 案例1 Ex1: Given a data = [6, 47, 49, 15, 42, 41, 7, 39, 43, 40, 36],求Q1, ...
- 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce(转)
零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce:http://www.aboutyun.com/thread-7567-1-1.html mapreduce学习目录总结 ...
- MX4_ADB
一.Ubuntu环境1. 建立或修改文件 ~/.android/adb_usb.ini,在文件开头或末尾添加一行,内容是0x2a45. 2. 建立或修改文件 /etc/udev/rules.d/51- ...
- 在C#中对枚举进行位运算--枚举组合
由于枚举的基础类型类型为基本的数值类型,支持位运算,因此可以使用一个值表示多个枚举的组合,在定义枚举时需要指定枚举数为2的幂指数方便进行位运算,即枚举数为1,2,4,8…,或1,1<<1, ...
- How can I add a site title refiner
一篇非常好的博客,收藏一下 https://sharepoint.stackexchange.com/questions/109409/how-can-i-add-a-site-title-refin ...
- [Android Pro] 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
原文:https://blog.csdn.net/qq_24118527/article/details/82867864