Go读取yaml文件,struct返回,json输出

程序模块中,缺少不了一些配置定义,这时定义yaml是个很好的选择

先定义yaml文件内容,文件名为:task_status_config.yaml

confs:#阅读类任务,即提醒任务read:name: readawait: #待开始任务status_id: 0ing: #进行中任务receipt: #是否已阅读yes:status_id: 4 #已完成no:status_id: 1 #进行中timeout: #已逾期receipt: #是否已阅读yes:status_id: 8 #已逾期-已完成no:status_id: 2 #已逾期-未完成#回执类任务,即预警任务receipt:name: receiptawait: #待开始任务status_id: 0ing: #进行中任务receipt: #是否已回执yes:status_id: 4 #已完成no:status_id: 1 #进行中timeout: #已逾期receipt: #是否已回执yes:status_id: 8 #已逾期-已完成no:status_id: 2 #已逾期-未完成#目标类任务,即系统任务target:name: targetawait: #待开始任务status_id: 0ing: #进行中任务receipt: #是否已回执yes:status_id: 3 #已回执no:status_id: 1 #进行中timeout: #已逾期receipt: #是否已回执yes:status_id: 7 #已逾期-已回执no:status_id: 2 #已逾期-未完成finish: #已完成任务status_id: 4 #已完成

 编写程序读取yaml配置文件

package mainimport ("encoding/json""fmt""os""gopkg.in/yaml.v2"
)type TaskStatusConf struct {Confs map[string]*TaskClassify `yaml:"confs" json:"confs"`
}type TaskClassify struct {Name    string        `yaml:"name" json:"name"`Await   StatusIdToInt `yaml:"await" json:"await"`Ing     TaskRecept    `yaml:"ing" json:"ing"`Timeout TaskRecept    `yaml:"timeout" json:"timeout"`Finish  StatusIdToInt `yaml:"finish" json:"finish"`
}type StatusIdToInt struct {StatusId int `yaml:"status_id" json:"status_id"`
}type TaskRecept struct {Receipt StatusReceipt `yaml:"receipt" json:"receipt"`
}type StatusReceipt struct {Yes StatusIdToInt `yaml:"yes" json:"yes"`No  StatusIdToInt `yaml:"no" json:"no"`
}func getYaml() {var c TaskStatusConf//读取yaml配置文件, 将yaml配置文件,转换struct类型conf := c.getConf()//将对象,转换成json格式data, err := json.Marshal(conf)if err != nil {fmt.Println("err:\t", err.Error())return}//最终以json格式,输出fmt.Println("data(string):\t", string(data))var res TaskStatusConf_ = json.Unmarshal(data, &res)// 以结构体形式访问fmt.Println(res.Confs["read"].Ing.Receipt.No.StatusId)
}// 读取Yaml配置文件,
// 并转换成conf对象  struct结构
func (taskStatusConf *TaskStatusConf) getConf() *TaskStatusConf {//应该是 绝对地址yamlFile, err := os.ReadFile("../task_status_config.yaml")if err != nil {fmt.Println(err.Error())}//err = yaml.Unmarshal(yamlFile, kafkaCluster)err = yaml.UnmarshalStrict(yamlFile, taskStatusConf)if err != nil {fmt.Println(err.Error())}return taskStatusConf
}

运行结果:

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

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

相关文章

基于直流微电网的光伏并网功率转换装置设计与运行仿真

摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源,近几年我国微电网产业的发展十分迅速。然后,越来越多的微电网系统建立并网,微电网产生的电能受外界因素影响较大,具有一定的随机性和波动性,给并网后的电力系…

高通410随身wifi编译安装Asterisk(chan_mobile)搭建内网voip系统

前几天写了教程在ubuntu上搭建Asterisk,成功在内网打通了SIP通话。 ubuntu是18.04,安装的虚拟机系统;最近手头的斐讯的N1,Armbian系统,以及高通410的Debian系统,就是ubuntu内核,所以理论上应该也可以安装Asterisk;在这之前在openwrt上研究了一周多,Asterisk是跑起来了…

MATLAB算法实战应用案例精讲-【图像处理】人脸识别(补充篇)

目录 人脸识别业务流程 1、通用流程概述 2、ArcFace接入集成及示例 2.1 SDK的获取 2.2 SDK包结构

leetcode (力扣) 154. 寻找旋转排序数组中的最小值 I+II (二分法)

文章目录 题目描述思路分析完整代码 题目描述 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以…

股票主力建仓

只有拥有足够的筹码,主力才能在实盘中控制股价的涨跌,所以,在确定目标股之后,主力想要进行控盘,首先要做的第一件事就是建仓。那么,主力会在什么时候建仓?建仓的时候会采用什么方法?…

53.redis分布式缓存

目录 一、单机安装Redis。 二、Redis主从集群。 2.1.集群结构 2.2.准备实例和配置 2.3.启动 2.4.开启主从关系 2.5.测试 三、搭建哨兵集群。 3.1.集群结构 3.2.准备实例和配置 3.3.启动 3.4.测试 四、搭建分片集群。 4.1.集群结构 4.2.准备实例和配置 4.3.启动…

监控之Spring Boot Admin

目录 一、Spring Boot Admin 简介 官方网址 简介 二、Spring Boot Admin的使用 启动SBA server 微服务端配置SBA server地址 查看监控信息 一、Spring Boot Admin 简介 官方网址 GitHup网址:GitHub - codecentric/spring-boot-admin: Admin UI for administ…

Linux下Redis安装及配置

首先下载redis安装包:地址 这里我使用的是7.0版本的! 将文件上传至linux上,此处不再多叙述,不会操作的,建议使用ftp! 第一步:解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步:移…

java读取word文件转html

一.pom引入依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.12.0</version><classifier>jdk16</classifier> </dependency>二.代码实现 package com.example…

nn.relu和F.rulu的区别

先来看看nn.ReLU的源码&#xff0c;可以看到其实在forward中nn.relu是调用了F.relu函数的&#xff1a; class ReLU(Module):r"""Applies the rectified linear unit function element-wise::math:\text{ReLU}(x) (x)^ \max(0, x)Args:inplace: can optionall…

Error:cannot launch node of type [map_server/map_server]

查看是否安装map_server软件包 rospack find map_server查看是否正确配置ROS环境变量 echo $ROS_PACKAGE_PATH如果没有安装map_server软件包 sudo apt-get install ros-noetic-map-server重新编译 catkin_make

网络安全--网络环境构成,系统的安全

2. 网络攻防环境 目标 了解攻防环境构成了解入侵检测系统&#xff08;平台&#xff09;的部署位置 2.1. 环境构成 2.1.1. 环境框图 一个基本的网络攻防实验环境包括&#xff1a;靶机、攻击机、入侵检测分析系统、网络连接四部分组成。 一个基础的网络攻防实验环境需要如下…

Python WebSocket 客户端教程

WebSocket 是一种在客户端和服务器之间实现双向通信的协议&#xff0c;常用于实时聊天、实时数据更新等场景。Python 提供了许多库来实现 WebSocket 客户端&#xff0c;本教程将介绍如何使用 Python 构建 WebSocket 客户端。 什么是 WebSocket WebSocket 是一种基于 TCP 协议…

使用 Kettle 完成数据 ETL

文章目录 使用 Kettle 完成数据 ETL数据清洗数据处理 使用 Kettle 完成数据 ETL 现在我们有一份网站的日志数据集&#xff0c;准备使用Kettle进行数据ETL。先将数据集加载到Hadoop集群中&#xff0c;然后对数据进行清洗&#xff0c;最后加载到Hive中。 在本地新建一个数据集文…

RocketMQ-RocketMQ集群实践

搭建RocketMQ可视化管理服务 下载可视化客户端源码下载 | RocketMQ 这里只提供了源码&#xff0c;并没有提供直接运行的jar包。将源码下载下来后&#xff0c;需要解压并进入对应的目录&#xff0c;使用maven进行编译。(需要提前安装maven客户端) mvn clean package -Dmaven.t…

Spring Boot 3.2 新特性之 RestClient

SpringBoot 3.2引入了新的 RestClient 用于http接口调用&#xff0c;采用了 fluent API 的风格&#xff0c;可以进行链式调用。 具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/spring-jdbc-client 一、概述 RestClient 是一个类似于 RestTem…

RPC和REST对比

RPC和REST对比 参考学习 RPC 和 REST 之间有什么区别&#xff1f; 当我们对比RPC和REST时&#xff0c;其实是在对比RPC风格的API和REST风格的API&#xff0c;后者通常成为RESTful API。 远程过程调用&#xff08;RPC&#xff09;和 REST 是 API 设计中的两种架构风格。API …

「Swift」取消UITableView起始位置在状态栏下方开始

前言&#xff1a;在写页面UI时发现&#xff0c;当隐藏了NavigationBar时&#xff0c;即使UITableView是从(0,0)进行布局&#xff0c;也会一直在手机状态栏下方进行展示布局&#xff0c;而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示&#xff1a; 问题…

qt-C++笔记之QStringList

qt-C笔记之QStringList —— 杭州 2023-12-03 code review! 文章目录 qt-C笔记之QStringList1.1.《Qt官方文档》第一部分翻译&#xff1a;继承自QList\<QString\>-初始化-添加字符串1.2.迭代字符串1.3.join()和split()1.4.filter()1.5.lastIndexOf()1.6.indexOf()1.7.…

最有效的wordpress禁止生成缩略图教程

把以下代码加入你的主题 functions.php 文件即可。 // 禁用自动生成的图片尺寸由www.wwttl.com提供学习 function shapeSpace_disable_image_sizes($sizes) {unset($sizes[thumbnail]); // disable thumbnail sizeunset($sizes[medium]); // disable medium sizeun…