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中的差不多,此处略过

运行效果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。

有疑问加站长微信联系(非本文作者)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络考试目的是什么,计算机网络基本原理考试大纲 -、课程的性质及其设置的目的与要求.doc...

计算机网络基本原理考试大纲-、课程的性质及其设置的目的与要求(-) 课程的性质、地位与任务计算机网络基本原理是高等教育自学考试计算机网络专业(独立本科段)考试计划中的一门专业基础课。通过本课程的学习,使应考者能够在己有的计算机基础知…

jpa原生query_Spring Data JPA原生SQL查询

package com.test.cms.dao.repository;import org.springframework.stereotype.Repository;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import java.math.BigInteger;import java.util.*;/*** 构建复…

电子计算机空调,电子计算机机房空调的设计规范

电子计算机机房空调的设计规范人气:1条 电子计算机机房要求空调的房间宜集中布置;室内温、湿度要求相近的房间,宜相邻布置。2条 主机房不宜设采暖散热器。如设散热器必须采取严格的防漏措施。3条 电子计算机机房的风管及其它管道的保温和消声材料及其粘结…

依时利考勤机说明书_考勤机(依时利)产品手册

1※产品介绍一、消费机系列:产品型号:ER-691C产品类别:IC卡收费机功能简介:1、数码管和液晶双重显示,操作方便,显示直观;2、有定值、不定值、编号菜单等多种消费模式,方便消费操作3、最大消费限…

用计算机进行有理数除法时,有理数的乘除法怎么算?,什么是有理数的乘除法。越详细越好。...

一、教学目标知识与技能:①使学生在了解乘法的基础上,掌握有理数乘法法则并初步掌握有理数乘法法则的合理性。②会进行有理数乘法运算。③了解有理数的倒数定义,会求一个数的倒数。过程与方法:①经历探索有理数乘法法则&#xff0…

python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...

欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!!您的点赞和关注将是我持续更新的动力呢.^v^有不懂的问题可以私聊我哦!前言如图,为什么输出的不是按Jen, Sarah, Phil, Edward的顺序呢?大家可以先想想为什么?思考…

雷库兹韦尔量子计算机,熬到2045年,人类可能靠人工智能战胜死亡了

这几天差评君在网上冲浪的时候,无意间挖到了这一张坟图。虽然这已经是五六年前的老梗了,但依旧今人唏嘘不已,毕竟这些年来的技术发展真的是又快又粗暴。让人不由得想像公知们一样阴阳怪气一番:科技啊,请你慢些走&#…

kdj超卖_做波段最成功的方法:“KDJ超卖”信号研判

一、超卖含义超买区,是指卖盘强盛并逐渐进入顶峰,在技术上存在反弹可能的区域。通常情况下,将KDJ震荡区间的20线作为徘徊区与超卖区的分界线。也就是说,当指标的数值超过20就算进入了超卖区间。很多朋友常常一买就跌,总…

浮点数在计算机中起什么作用,浮点数在计算机中的存储表示

今天在看面试宝典,注意到上面所说浮点数在内存里和整数的存储方式不同,但究竟有何不同呢?在网上搜了一下:在http://blog.csdn.net/djsl6071/archive/2007/03/16/1531336.aspx中介绍了浮点数在内存中的存储方式,觉得不错…

elxel表格纸张尺寸_一本书的诞生:纸张知识

平张纸的数量以令来计算,不论纸张(百科)大小,每500张为一令。卷筒纸的数量通常以吨来计算,即用重量来反映数量。单张纸的重量以每平方米的克重来表示,单位是gsm,即g/m2,如果说80g的纸,就是每平方…

学校计算机教室的用途,录播教室有什么功能,又有哪些用途

随着教育和科技的发展,传统的语音教育已经不能满足教育方式多元化的需要。然而一间功能的齐全的录播室正好完美的解决了这一难题,,那么录播教室到底有哪些功能呢?下面我们就来了解一下录播教室的几大功能和用途吧!一、…

pgsql处理文档类型数据_【干货总结】:可能是史上最全的MySQL和PGSQL对比材料

关于SQL特性支持情况的对比,可以参考:http://www.sql-workbench.net/dbms_comparison.html9. 主从复制安全性PGSQL同步流复制、强同步(remote apply)、高安全,不会丢数据PGSQL同步流复制:所有从库宕机,主库会罢工&…

计算机局域网有哪些硬件组成,局域网的硬件组成有哪些

局域网的硬件组成有哪些局域网(英文:Local Area Network 缩写LAN),指有限区域(如办公室或楼层)内的多台计算机通过共享的传输介质互连,所组成的封闭网络。一般是方圆几千米以内,局域网可以实现文件管理、应用软件共享、打印机共享…

afn原理 ios_iOS面试题:AFNetworking 底层原理分析

AFNetworking主要是对NSURLSession和NSURLConnection(iOS9.0废弃)的封装,其中主要有以下类:1). AFHTTPRequestOperationManager:内部封装的是 NSURLConnection, 负责发送网络请求, 使用最多的一个类。(3.0废弃)2). AFHTTPSessionManager:内部封装是 NSUR…

追加的英文计算机,Latex同时添加中英文摘要

注重版权,若要转载烦请附上作者和链接作者:Joshua_yi链接:https://blog.csdn.net/weixin_44984664/article/details/106168468哎,已经步入了开始写论文的年纪了,从之前的上传作业也慢慢变成了上交论文第一次用latex这玩…

网页中设定表格边框的厚度的属性_请写出在网页中设定表格边框的厚度的属性_______;设定表格单元格之间宽度属性...

【单选题】已知i110sin(ωt φ1)A,i25sin(ωt φ2)A,φ1-φ2π,则它们的相位关系是【判断题】488 . 混合性食物的食物热效应约占其总能量的10%。【单选题】2.2KW的电器正常工作1h所消耗的电能是【单选题】*从流场角度而言,北半球地面气旋是________。【单选题】*船舶在南半球…

React 路由

引言 在我们之前写的页面当中,用我们的惯用思维去思考的话,可能会需要写很多的页面,例如做一个 tab 栏,我们可能会想每个选项都要对应一个 HTML 文件,这样会很麻烦,甚至不友好,我们把这种称为 …

清华大学06届 计算机王煜,祝贺!这两位三年前从超银中学毕业的学霸,今年被清华大学“破格”录取啦...

青岛日报社/观海新闻8月13日讯 今年是“强基计划”首年招生,“强基计划”属于单独批次录取,也是高考所有批次录取中最早公布结果的,一经录取,就不再参加后续高考志愿录取投档。观海新闻记者从超银中学获悉,青岛二中今年…

jmeter web服务器协议,【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter测试SOAP协议性能测试脚本开发(示例代码)...

目录:【阐述】:首先应该遇到了一个共同的问题,JMeter3.2之后就没有WebService(SOAP) Request,后来经过查询网上资料得知其实可以用HTTP请求来操作,结果是一样的。【步骤】:一、创建WebService接口模拟服务端如果大家有…

滨江机器人餐厅_餐厅来了机器人服务员

龙源期刊网http://www.qikan.com.cn餐厅来了机器人服务员作者:柯静夏峥来源:《人民周刊》2016年第03期餐饮企业引入机器人,博的是眼球,省的是最关键的人力成本。不少人都希望身边有“大白”那样的暖男机器人,这并非遥不…