[Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)
来源:互联网 发布:松下格式化软件下载 编辑:程序博客网 时间:2024/06/13 17:18
为了将我们写好的Server发布到服务器上,就要将我们的代码进行build打包,这样如果以后想要修改一些代码的话,需要重新给代码进行编译打包并上传到服务器上。
显然,这么做过于繁琐。。。因此常见的做法都是将Server运行中可能会频繁变更的变量、数值写入配置文件中,这样直接让程序从配置文件读取参数,避免对代码频繁的操作。
关于配置文件的格式,在这里推荐YAML 和XML~ XML是传统的配置文件写法,不过本人比较推荐yaml,他比XML要更加人性化,也更好写,关于yaml的详细信息可以参考: yaml官网
接下来就是解析他们了,目前golang官方还没有解析yaml的库,因此我推荐使用第三方的go-yaml包,
这里同样给出解析xml配置文件的代码:
运行效果如下:
显然,这么做过于繁琐。。。因此常见的做法都是将Server运行中可能会频繁变更的变量、数值写入配置文件中,这样直接让程序从配置文件读取参数,避免对代码频繁的操作。
关于配置文件的格式,在这里推荐YAML 和XML~ XML是传统的配置文件写法,不过本人比较推荐yaml,他比XML要更加人性化,也更好写,关于yaml的详细信息可以参考: yaml官网
比如我们可以将Server监听的端口作为变量,写入配置文件 config.yaml 和 config.xml,放入代码的根目录下,这样当我们想要更换服务器端口的时候,只要在配置文件中修改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.1Config1: EasyConfig2: Feature1: 2 Feature2: [3, 4]Port: :6060Config4: ISConfig5: 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.Tokenvar err errorKeylst := 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:=0j:=0for t, err = decoder.Token(); err == nil; t, err = decoder.Token() {switch token := t.(type) {// 处理元素case xml.StartElement:name := token.Name.LocalKeylst[i]=string(name)i=i+1case xml.CharData:content1 := string([]byte(token))//Valuelst=append(Valuelst,content1)Valuelst[j]=content1j=j+1}}for count:=0;count<len(Keylst);count++{map1[Keylst[count]]=Valuelst[count]}return map1}//取出map的函数跟yaml中的差不多,此处略过
运行效果如下:
我已经把SocketServer系列的代码整合到了一起,发布到了我个人的github上:点击链接, 希望大家有兴趣的可以学习star一下~
1 0
- [Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)
- [Golang] 从零开始写Socket Server(1): Socket-Client框架
- [Golang] 从零开始写Socket Server(2): 自定义通讯协议
- [Golang] 从零开始写Socket Server(5):Server的解耦—通过Router+Controller实现逻辑分发
- [Golang] 从零开始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)
- [Golang] 从零开始写Socket Server(6)【完结】:日志模块的设计与定时任务模块模块
- 从零开始学写HTTP服务器(二)socket编程实现简单的http server
- golang使用yaml格式解析构建配置文件
- Golang——使用yaml配置文件
- PHP读取4种配置文件(php,ini,yaml,xml)
- STORM入门之(yaml配置文件说明)
- 从零开始写Go网络通信框架(1)——基本的Socket Client/Server的编写
- testng多浏览器支持(二)将系统中的文件放入配置文件中进行读取
- 将信息放入xml中
- (三)JAVA利用反射机制将XML中的内容放入实体对象中
- OpenCV实践(7)- XML和YAML文件的输入输出
- 信息标记与提取方法(XML、JSON、YAML)
- wpf的xml配置文件的读与写(一)
- C语言的标准库概述
- Exactly-once Spark Streaming from Apache Kafka
- CentOS6.5 升级 Python 2.7 版本
- Leecode_Single Number
- Leetcode: Unique Binary Search Trees II
- [Golang] 从零开始写Socket Server(4):将运行参数放入配置文件(XML/YAML)
- IT人必备的设计网址(推荐时空隧道谷歌插件访问外网)
- bzoj-2006 超级钢琴
- Linux安装MySQL的两种方法
- Spring MVC ParameterMethodNameResolver example
- Linux下Mysql的配置
- linux安装mysql后root无法登录
- java IO学习总结
- 网络安全技术(二)