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,一经查实,立即删除!

相关文章

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第二步:移…

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

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

使用 Kettle 完成数据 ETL

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

RocketMQ-RocketMQ集群实践

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

RPC和REST对比

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

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

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

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.…

【Delphi】实现彩色日志显示框(TRichEdit Helper)

目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候&#xff0c;经常需要显示程序运行的日志&#xff0c;一般我们会使用TMemo&#xff0c;使用起来简单&#xff0c…

简单3D姿态基线模型网络架构与验证【SIM】

在这篇文章中&#xff0c;我们将回顾 ICCV’17 上提出的 Simple 3D Pose Baseline &#xff0c;即用于 3d 人体姿势估计的简单而有效的基线&#xff0c;也称为 SIM。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

基础组件总结(以Element UI组件库为例)

一般对一个组件的使用方式&#xff1a; 每一个组件都有被绑定的数据&#xff0c; &#xff08;1&#xff09;首先会对组件的数据初始化&#xff08;a.data中赋初值 b. 在生命周期函数created或mounted中为变量赋予初值&#xff09; &#xff08;2&#xff09;由于不同组件的…

C语言扫雷小游戏

以下是一个简单的C语言扫雷小游戏的示例代码&#xff1a; #include <stdio.h>#include <stdlib.h>#include <time.h>#define BOARD_SIZE 10#define NUM_MINES 10int main() { int board[BOARD_SIZE][BOARD_SIZE]; int num_flags, num_clicks; int …

threadlocal - 黑马程序员

目录 1、ThreadLocal介绍1.2 ThreadLocal基本使用1.2.1、常用方法1.2.2 使用案例 1.3 ThreadLocal类与synchronized关键字 2、运用场景_事务案例3、ThreadLocal的内部结构4、 ThreadLocal的核心方法源码5、ThreadLocalMap源码分析5.2 弱引用和内存泄漏 课程地址&#xff1a; ht…

Blender学习笔记:小车狂奔动画

文章目录 路旁小树汽车尾气移动 教程地址&#xff1a;八个案例教程带你从0到1入门blender【已完结】 小车建模 路旁小树 1 添加摄像机&#xff0c;在小车下面拉一个平面&#xff0c;覆盖到摄像机的观察视窗。复制一层平面&#xff0c;收窄变成小车两侧的路面&#xff0c;编辑…

【设计模式-4.3】行为型——责任链模式

说明&#xff1a;本文介绍设计模式中行为型设计模式中的&#xff0c;责任链模式&#xff1b; 审批流程 责任链模式属于行为型设计模式&#xff0c;关注于对象的行为。责任链模式非常典型的案例&#xff0c;就是审批流程的实现。如一个报销单的审批流程&#xff0c;根据报销单…

力扣每日一题day26[42. 接雨水]

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

一站式自动化:Ansible Playbook的全面学习之旅

1 Playbook介绍 1.1 Playbook介绍 playbook 是由一个或多个play组成的列表 Playbook 文件使用YAML来写的 1.2 YAML 1.2.1 介绍 是一种表达资料序列的格式&#xff0c;类似XML Yet Another Markup Language 2001年首次发表 www.yaml.org 1.2.2 特点 可读性好 和脚本语言交…

RPG项目01_新输入输出

基于“RPG项目01_脚本代码”&#xff0c;本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;如果一直跟着做教学项目&#xff0c;请先保存项目&#xff0c;再继续修改unity为新输入输出系统。 向下翻&#xff0c; 向下翻&#xff0c; 选择both加入新输入输出系…

Android把宽高均小于给定值的Bitmap放大到给定值,Kotlin

Android把宽高均小于给定值的Bitmap放大到给定值&#xff0c;Kotlin 假设拉伸放大到SIZE2048 fun scaleSize(image: Bitmap): Bitmap {val w image.widthval h image.heightvar newW: Intvar newH: Intif (w > h) {newW SIZEnewH (SIZE / w.toFloat()) * h} else {newW …