Golang实践录:读取xml配置文件

本文对 xml 文件进行解析。

概述

某项目涉及到数据传输,我负责运行在工控机的客户端。实际上,工控机已经有了作为“数据传输”角色的程序,已经 worked 了很多年,从工程较多处出现的func_<年份>来看,年龄不小于已经上小学的李大锤。作为继任者,理应继续发扬,但接手以来,数值传输出现了各种或大或小的问题,涉及到不同位置的服务端,也涉及到不同厂商的第三方的别家的中间件。实在无力再在其上添砖加瓦。作为具体实施者,考虑到技术栈、开发难度和时间,我在会议多次提议后,最终同意使用 Golang 来实现,并以此作为一个新的数据通道,后续择机发挥作用。

在此之前,我自己总结的 Golang 程序框架已经应用到4个项目工程里了,期间积累了大量有用的工具函数,因此开发的基础性工作不多,专注业务即可。但在实际上,还需要考虑和其它业务程序的交互、数据格式、xml配置文件等方面。本文抛开主要业务不谈,单纯考虑兼容性,测试xml配置文件的读取。

测试

Golang 内置了解析 xml 的接口,直接使用即可,不引入外部包。

配置文件config.ini文件内容:

<!-- xml 测试样例 -->
<?xml version="1.0" encoding="UTF-8" ?>
<config><info><id>000250</id><num>256</num><!-- 小节中有小节 --><person><location>梧州市岑溪市</location><email>li@latelee.cn</email><!-- 代码不解析此段 --><name><first>First</first><last>Last</last></name></person></info><server><filename back="backkkk">/tmp/log.txt</filename><url>http://172.18.18.168:9001/testing</url><!-- 空字段 --><empty></empty><!-- 注释字段,代码中有 --><!-- <time></time> --></server>
</config>

测试代码:

package testimport ("encoding/xml""fmt""io/ioutil""testing"
)var (cfgFile string = "config.xml"
)type XMLConfig_t struct {XMLName    xml.Name    `xml:"config"` // 最外层的标签 configInfoNode   XMLInfo_t   `xml:"info"`   // 读取 info 标签下的内容ServerNode XMLServer_t `xml:"server"` // 读取 server 标签下的内容
}type XMLInfo_t struct {Id         string      `xml:"id"`Num        string      `xml:"num"`PersonNode XMLPerson_t `xml:"person"` // 读取 person 标签下的内容
}type XMLPerson_t struct {Location string `xml:"location"`Email    string `xml:"email"`
}type XMLServer_t struct {Filename string `xml:"filename"`Url      string `xml:"url"`Empty    string `xml:"empty"`Time     int    `xml:"time"`
}func TestXml(t *testing.T) {fmt.Println("test of xml...")// 读文件xdata, err := ioutil.ReadFile(cfgFile)if err != nil {fmt.Printf("open config file [%v] failed: %v\n", cfgFile, err.Error())return}// 解析var xmlConfig XMLConfig_terr = xml.Unmarshal(xdata, &xmlConfig)if err != nil {fmt.Printf("parse xml error: %v", err.Error())return}fmt.Printf("id: %v location: %v\n", xmlConfig.InfoNode.Id, xmlConfig.InfoNode.PersonNode.Location)fmt.Printf("filename: %v time: %v\n", xmlConfig.ServerNode.Filename, xmlConfig.ServerNode.Time)}

从代码可以看到,xm的解析和json的解析类似,在结构体中通过关键字xml来判断,如xml层级较深,则相应的结构体亦然,但可以选取所需字段,不一定要全部给出定义。

输出结果:

test of xml...
id: 000250 location: 梧州市岑溪市
filename: /tmp/log.txt time: 0

小结

开发维护代码,一定要考虑兼容性,某些代码或机制可能被认为反常,但可能是从历史教训中得到的宝贵经验,牵一发而动全身。就 Golang 解析 xml 而言,并不是很难,鉴于笔者用到的机会不多,因此不展开测试。

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

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

相关文章

Linux信号超详细剖析

预备知识&#xff1a; 一、信号产生(OS发给进程) 1、键盘组合键 Linux中&#xff0c;一次登录对应一个终端&#xff0c;bash/shell。且只允许一个进程是前台进程&#xff0c;默认就是bash/shell&#xff0c;其它都是后台进程。获取键盘输入的是前台进程。 Ctrlc: 向前台进程…

面试题:什么是负载均衡?常见的负载均衡策略有哪些?

文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇&#xff0c;基础篇点击&#xff1a;C#基础与进阶扩展合集-基础篇 二、进阶扩展 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、Adapt适配器 5、值类型与引用类型 6、程序设置当前项目工作目录 7、获取App.config配置文件中的值 …

【计算机网络笔记】虚拟局域网(VLAN)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Qt5.15.2的镜像网址

其它版本的qt把相应数字更换即可 已安装的QT怎么更新安装组件。离线版QT安装&#xff1a;已安装的QT怎么更新安装组件。离线版QT安装_哔哩哔哩_bilibili https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5152_wasm/https://mirrors.…

使用 CSS Grid 的响应式网页设计:消除媒体查询过载

文章目录 前言介绍 CSS Grid让我们开始吧实现高级响应性1、Repeat() 2、Auto-fit3、Minmax()结论 前言 你是否厌倦了在实现响应式网站时需要管理多个媒体查询&#xff1f;说再见复杂的代码&#xff0c;拥抱更简单的解决方案吧&#xff1a;CSS Grid。 在这篇文章中&#xff0c;…

WT2605-24SS录放音语音芯片:便捷按键功能提升用户体验

随着科技的飞速发展&#xff0c;语音芯片已经成为了日常生活中不可或缺的一部分。在众多语音芯片中&#xff0c;WT2605-24SS录放音语音芯片凭借其出色的性能和人性化的按键设计&#xff0c;备受用户青睐。本文将重点介绍唯创知音WT2605-24SS的按键功能&#xff0c;包括REC脚和P…

AC-DC 220V转12V 500毫安非隔离恒压恒流降压芯片

AC-DC 220V转12V 500毫安非隔离恒压恒流降压芯片是一款高性能的电源管理芯片&#xff0c;它能够将220V的交流电压降低到12V直流电压&#xff0c;并且具有恒压恒流输出、多模式控制、低待机功耗、高精度输出、内置软启动、多种保护功能等特点。 该芯片的非隔离系统恒压恒流输出可…

Oracle行转列,列转行使用实例

-----1.行转换为列 select a.fworkcenter as 车间,F1||-数量 as 类型, fspec as 规格 ,ftype as 前缀 , to_char(fdate,YYYY-MM-dd) as 日期, (case when a.fcode in (900,901) then to_char(fcount,fm90.990) else cast(fcount as varchar(20)) end) 值 , …

每日清晨 不可辜负 :今天的样子是昨天造成的,明天的样子是今天造成的,每日清晨一小时

程序员宝藏书籍 以下推荐的书籍&#xff0c;可从下面网盘中随意取用 下述书籍 1.1 崇拜的大佬推荐的书籍 1.2 都经本人浏览过目录&#xff0c;都有大量实操代码&#xff0c;无代码书籍全Pass除非业界公认经典晚上用家里宽带把书籍上传网盘了&#xff0c;再分享出来链接&#x…

企业存货库存综合分析全流程图

上期我们谈到了 诊断存货管理的4大维度&#xff0c;今天我们进一步全方位、全周期的分析企业内存货的问题。 企业存货是企业用于生产或销售的货品&#xff0c;是企业价值增值变现的载体&#xff0c;但是如果一旦没有产生交易&#xff0c;存货就很有可能带来损失。存货伴随着企业…

PS是什么?PS的在线使用教程

Photoshop简介 AdobePhotoshop&#xff0c;简称“PS“Photoshop主要处理由像素组成的数字图像。Photoshop拥有强大的图像处理工具和绘图工具&#xff0c;可以有效地编辑图片。在最新版本的Photoshop中&#xff0c;甚至可以完成3D和视频的后期工作。 Photoshop是目前最强大的图…

使用 JDBC 连接 Neo4j(头歌)

文章目录 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09;任务描述相关知识完成 JDBC 环境设置连接 Neo4j 对数据进行查询 编程要求测试说明答案测试前准备代码文件 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09; 任务描述 本关任务&#xff1a;使用…

XXL-Job详解(四):任务注册原理

目录 前言任务注册注册方法 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xff09;&#xff1a;组件架构 XXL-Job详解&#xff08;二&#xff09;&#xff1a;安装部署 XXL-Job详解&#xff08;三&#xff0…

万界星空科技MES生产管理系统的主要功能

万界星空科技MES/云MES生产管理系统主要包括以下功能模块&#xff1a; 生产计划管理&#xff1a;根据订单和生产计划&#xff0c;制定详细的调度表和车间生产经营计划&#xff0c;将生产计划和客户订单转化为具体的生产经营计划&#xff0c;消除有效的日常运营&#xff0c;大大…

知识图谱最简单的demo实现

一、简介 知识图谱整个建立过程可以分为以下几点&#xff1a; #mermaid-svg-zJuLB8k8EgBQF8M0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zJuLB8k8EgBQF8M0 .error-icon{fill:#552222;}#mermaid-svg-zJuLB8k8E…

【C++干货铺】继承 | 多继承 | 虚继承

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 继承的概念及定义 继承的概念 继承的定义 继承基类成员访问方式的变化 基类和派生类的赋值转化 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造…

基于Java SSM框架+Vue实现大学生兼职信息网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现大学生兼职信息网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认…

nodejs的安装和验证

1.浏览器访问nodejs官网&#xff0c;根据操作系统选择对应版本的安装文件&#xff0c;如下图所示&#xff1a; 2.双击下载的安装文件&#xff0c;点击“Next”&#xff0c;如下图所示&#xff1a; 3.勾选“I accept the terms in the License Agreement”&#xff0c;然后点击“…

MIAOYUN荣获“2023中国赛宝信息技术应用创新优秀解决方案应用创新示范方向三等奖”

11月30日&#xff0c;2023&#xff08;第四届&#xff09;数字化转型推动高质量发展大会在中国海口成功召开&#xff0c;会上举办了2023中国赛宝信息技术应用创新优秀解决方案征集活动颁奖仪式。成都元来云志科技有限公司&#xff08;简称“MIAOYUN”&#xff09;联合国网浙江省…