Go读取yaml文件到struct类

1、yaml文件准备

common:
   secretid: AKIDxxxxx
   secretKey: 3xgGxxxx
   egion: ap-guangzhou
   zone: ap-guangzhou-7
   InstanceChargeType: POSTPAID_BY_HOUR

2、config配置类准备

可以通过在线配置工具转换成struct

例如:https://www.printlove.cn/tools/yaml2go

代码:

type ConfigData struct {
   // 公共配置
   Common Common `yaml:"common"`
}

type Common struct {
   // 密钥id。密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
   SecretId string `yaml:"secretid"`
   // 密钥key
   SecretKey string `yaml:"secretKey"`
   // 地域
   Region string `yaml:"region"`
   // 可用区
   Zone string `yaml:"zone"`
   //实例计费模式。取值范围:PREPAID:预付费,即包年包月。POSTPAID_BY_HOUR:按小时后付费。
   InstanceChargeType string `yaml:"InstanceChargeType"`
}

3、读取配置文件到配置类

使用viper读取配置到配置类中

3.1、安装Viper组件

go install github.com/spf13/viper@latest

3.2、golang** **代码编写

yaml文件放在工程根目录的data文件夹中

package main

import (
   "bufio"
   "github.com/spf13/viper"
   "io"
   "os"
   "strings"
)

type ConfigData struct {
   // 公共配置
   Common Common `yaml:"common"`
}

type Common struct {
   // 密钥id。
   SecretId string `yaml:"secretid"`
   // 密钥key
   SecretKey string `yaml:"secretKey"`
   // 地域
   Region string `yaml:"region"`
   // 可用区
   Zone string `yaml:"zone"`
   //实例计费模式。取值范围:PREPAID:预付费,即包年包月。POSTPAID_BY_HOUR:按小时后付费。
   InstanceChargeType string `yaml:"InstanceChargeType"`
}

func InitConfigStruct(path string) *ConfigData {
   var ConfigData = &ConfigData{}
   vip := viper.New()
   vip.AddConfigPath(path)
   vip.SetConfigName("config")
   vip.SetConfigType("yaml")
   //尝试进行配置读取
   if err := vip.ReadInConfig(); err != nil {
      panic(err)
   }
   err := vip.Unmarshal(ConfigData)
   if err != nil {
      panic(err)
   }

   return ConfigData
}

func main(){
    configData := InitConfigStruct("./data/")
    secretId := configData.Common.SecretId
    secretKey := configData.Common.SecretKey
    fmt.Printf("secretId:%s\n", secretId)
    fmt.Printf("secretKey:%s\n", secretKey)

}
本文转载于网络 如有侵权请联系删除

相关文章

  • 宽度学习详解(Broad Learning System)

    大家好,又见面了,我是你们的朋友全栈君。宽度学习(BroadLearningSystem)1:Introduction1.1:级联相关网络(本节来自周志华《机器学习》)1.2:随机向量函数连接网络(RVFLNN)2:宽度学习系统(BroadLearningSystem)2.1:不含增量学习的BLS2.2:增量学习3:感想4:实验4.1:Github4.2:不含增量学习的MNIST结果:4.3:直接求训练集X的伪逆,进而求得W?4.4:含增量学习的MNIST结果Github已添加含增量学习的代码,主要还是根据之前参考的代码修改,处理MNIST的结果也已经放在最后一节。已经很久不看这方面的内容。欢迎给原作者代码star(链接在4.1)。我也是最近才知道除了深度学习,还有一个神经网络叫宽度学习(下文统称BLS)。1:Introduction宽度学习是澳门大学科技学院院长陈俊龙和其学生于2018年1月发表的文章提出的,文章名为《BroadLearningSystem:AnEffectiveandEfficientIncrementalLearningSystemWithouttheNeedfo

  • API和SDK的区别

    模组固件的二次开发、App或者面板的二次开发都会用到涂鸦平台提供的API和SDK,那么API和SDK到底是什么呢?又有什么区别呢?一、API是什么?API,ApplicationProgrammingInterface即应用程序接口。API提供用户编程时的接口,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。以涂鸦开发者进行自定义面板的开发为例,涂鸦文档中心提供了API文档。跳转链接:API-文档中心-涂鸦开发者不难发现该API文档介绍了一些方法、函数的功能以及在使用时需要的参数,并提供了示例。通过调用这些函数可以无需具体知道这些函数的代码,快速实现自定义面板的二次开发。涂鸦文档中心还提供了微信小程序开发、固件二次开发等的API文档。二、SDK是什么?SDK,SoftwareDevelopmentKit即软件开发工具包。SDK包含开发的相关文档、范例和调试工具等等。SDK被开发出来是为了减少程序员工作量的。比如——TuyaIoTOSSDK是涂鸦独创的IoTOS操作系统级别的云端SDK,提供了按照业务需

  • 【大家的项目】Poem-openapi

    尽管有不少朋友已经知道我这几天在做什么,但当Poem-openapi的第一版准时完成,并且完全按照刚开始的想法正常工作时,我还是按捺不住内心的激动希望跟大家分享。注意:Poem-openapi只支持Poem,所以你如果希望使用它,Poem是必要的依赖,而且我不会考虑支持其它的web框架。?据我所知这是Rust语言里第一个用过程宏来实现OpenAPI规范的库,它的工作方式和Async-graphql非常的像,以类型安全的代码来编写符合OpenAPI规范的API并自动生成文档。过程宏的使用完全IDE友好,你绝对不会直接用到过程宏生成的任何代码,避免了IDE满屏幕的红线,或者没法自动完成(我很看重这个,脱离IDE的自动完成我不会写代码)。?下面我以一个小例子来介绍它是如何使用的:这是一个简单的用户管理API实现(别管它有没有什么实际价值,也别告诉我oai这个名字很奇怪,这是官方起的简称,不怪我),我们只看它如何使用。?每一个接口都需要定义Request和Response类型,除非它不接收或者返回任何内容。create_user接口创建一个用户,由于它的请求对象类型是Json,所以它只支持co

  • 【干货】手把手教你用苹果Core ML和Swift开发人脸目标识别APP

    【导读】CoreML是2017年苹果WWDC发布的最令人兴奋的功能之一。它可用于将机器学习整合到应用程序中,并且全部脱机。CoreML提供的机器学习API,包括面部识别的视觉API、自然语言处理API。苹果软件主管兼高级副总裁CraigFederighi在大会上介绍说,CoreML致力于加速在iPhone、iPad、AppleWatch等移动设备上的人工智能任务,支持深度神经网络、循环神经网络、卷积神经网络、支持向量机、树集成、线性模型等。本文将带你从最初的数据处理开始教你一步一步的实现一个“霉霉”检测器,来自动从一堆手机照片中找出“霉霉”。专知内容组编辑整理。BuildaTaylorSwiftdetectorwiththeTensorFlowObjectDetectionAPI,MLEngine,andSwiftbySaraRobinson注释:本文没有用TensorFlow官方库,我用Swift构建了基于我的模型构建了应用程序。这在将来可能会改变,但Taylor对此有最终的发言权。目前为止还没有官方swift接口的TensorFlow库,所以我们用单纯的swift在我们模型的基础上

  • 微信2017数据报告

    11月9日,微信团队在成都腾讯全球合作伙伴大会上为全球伙伴解读了最新的《2017微信数据报告》。微信每天有多少条消息被发送?目前有多少个行业已经在使用小程序了?答案尽在其中:)

  • 【深入研究】使用RNN预测股票价格系列一

    今天编辑部推出一期基于Tensorflow建立循环神经网络来预测股票市场价格的教程。第一部分着重于预测标准普尔500指数(大家可以自行换成国内指数就好)。概述我们将解释如何建立一个有LSTM单元的RNN模型来预测S&P500指数的价格。数据集可以从Yahoo!下载。在例子中,使用了从1950年1月3日(Yahoo!Finance可以追溯到的最大日期)的S&P500数据到2017年6月23日。为了简单起见,我们只使用每日收盘价进行预测。同时,我将演示如何使用TensorBoard轻松调试和模型跟踪。关于RNN和LSTMRNN的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅

  • 腾讯云对话机器人返回结果调用方式

    注意:目前只要请求被服务端正常处理了,响应的HTTP状态码均为200。例如返回的消息体里的错误码是签名失败,但HTTP状态码是200,而不是401。 正确返回结果以云服务器的接口查看实例状态列表(DescribeInstancesStatus)2017-03-12版本为例,若调用成功,其可能的返回如下为:{ "Response":{ "TotalCount":0, "InstanceStatusSet":[], "RequestId":"b5b41468-520d-4192-b42f-595cc34b6c1c" } }复制 Response及其内部的RequestId是固定的字段,无论请求成功与否,只要API处理了,则必定会返回。 RequestId用于一个API请求的唯一标识,如果API出现异常,可以联系我们,并提供该ID来解决问题。 除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的TotalCount和InstanceStatus

  • IP通信基础 实验一

    PC端配置:配置ip地址 交换机配置:①创建VLAN system-view vlan10 vlan20 ②配置PC端接口 interfacegi1/0/1 portlink-typeaccess portaccessvlan10 interfacegi1/0/2 portlink-typeaccess portaccessvlan10 interfacegi1/0/3 portlink-typeaccess portaccessvlan20 interfacegi1/0/4 portlink-typeaccess portaccessvlan20

  • llvm中如何利用分支概率和基本块频率估计

    1.背景   llvm自2.9版以后,已经集成了对分支概率和基本块频率的静态分析。 分支概率(branchprobability)是指在程序的控制流图中,从控制流从一个基本块A到其任意后继基本块Si的概率。控制流从基本块A到其所有后继基本块的概率之和为1. 基本块频率(blockfrequency)是指在程序的控制流图中,任意基本块的执行次数。这两种信息都可以通过静态分析得到。其原理如下【1】【2】: Analternativeisstaticprofiling,inwhichacompilerestimatesexecutionfrequencies(notabsolutecounts)withstaticprogramanalysis.Astaticprofileeliminatesthedrawbacksofdynamicprofiling—ifitaccuratelycapturesaprogram’sdynamicbehavior.Recentworksuggeststhatstaticanalysiscanpredictdynamicprogrambeh

  • Linux kill 指定进程名的四种方式-转载

    kill-9$(ps-ef|grep进程名关键字|grep-vgrep|awk'{print$2}') https://www.cnblogs.com/chay/p/10473091.html  

  • 五星填数(dfs)

    /*标题:五星填数如【图1.png】的五星图案节点填上数字:1~12,除去7和11。要求每条直线上数字和相等。如图就是恰当的填法。请你利用计算机搜索所 *有可能的填法有多少种。注意:旋转或镜像后相同的算同一种填法。请提交表示方案数目的整数,不要填写任何其它内容。*/ packagetest; publicclass五星填数{ staticintcount=0; publicstaticvoidmain(Stringarg[]) { int[]a={1,2,3,4,5,6,8,9,10,12}; dfs(0,9,a); System.out.println(count/10); } privatestaticvoiddfs(intstep,intlength,int[]a){ //TODOAuto-generatedmethodstub if(step==length) { if(check(a)){ //System.out.println(count); count++; } } else { for(inti=step;i<=length;i++) { swap(i,st

  • Spring学习笔记(四)--MVC概述

    一、飞机最近马来西亚航空370号班机事故闹得沸沸扬扬,情节整的扑朔迷离,连我在钻研springMVC平和的心情都间接的受到了影响。正当我在想这个MVC的处理过程可以怎样得到更好的理解呢?灰机,灰机…同事的议论和天上的嗡嗡声刹那间给了我一个答案,可以和民航系统进行类比。民航系统类似于一个专业处理旅行的系统,此系统中有一些对旅行去做的事比如出差等本身意义不大,只在旅行系统中才存在的术语。比如说1.航班MH370是一个航班代号,表示从吉隆坡到北京的航班;2.航班时刻表来进行记录,查找所有的飞行航班;3.机票:在民航系统中唯一标识旅行者的token,上飞机需要飞机票,下飞机凭飞机票取行李;4.安检:检查一下有没有带违禁品;5.飞机:完成从出发地到目的地的旅行;6.机场:从乘客来看,无非是机票发售,安全检查,提供航班的地方。 回到web系统,一个url就是唯一标识一个处理逻辑的名称。比如login.do就等于登陆逻辑的标识。HandlerMapping相当于航班时刻表,标识航班和对应的路线。HandlerMethod相当于处理航班的飞机,来完成从登机处到目的地的转换。handlerAd

  • opnet启动和debug模式提示warning:找不到目录

    找不到的目录一般就是之前曾经在opnet中打开过的模型目录,后来把该文件目录删除导致的警告提示 如何去除解决办法: 1.Edit——Perferences    2.输入mod_dirs——find查找    3.点击modelDirectories后面的值,打开的即为之前在opnet打开过的目录。选中已经删除不存在的文件目录(warning提示的内容),点击右侧的delete。这样,重新启动opnet就不会有该警告,debug模式结束后也不会有该警告    

  • C#将B转换成GB、MB和KB(字节转换

    constintGB=1024*1024*1024;//定义GB的计算常量 constintMB=1024*1024;//定义MB的计算常量 constintKB=1024;//定义KB的计算常量 publicstringByteConversionGBMBKB(Int64KSize) { if(KSize/GB>=1)//如果当前Byte的值大于等于1GB return(Math.Round(KSize/(float)GB,2)).ToString()+"GB";//将其转换成GB elseif(KSize/MB>=1)//如果当前Byte的值大于等于1MB return(Math.Round(KSize/(float)MB,2)).ToString()+"MB";//将其转换成MB elseif(KSize/KB>=1)//如果当前Byte的值大于等于1KB return(Math.Round(KSize/(float)KB,2)).ToString()+"KB";//将其转换成KGB else returnKSize.ToString()+"Byte";//显示

  • 程序员快乐撩妹秀技术两不误(行政财务拆分篇)

    本文首发公众号:CoXie聊办公自动化, 致力于打造别人家的公众号 原文地址以及视频演示效果:请点击这里超链接 前言 最近在有个小伙伴问我,每次公司发的工资表里面都是有所有的人员信息及工资等,还要对这些数据进行分类,分成多个部门表,然后再发下去给各个部门进行核对,每次手动操作虽然简单,但是太浪费时间,问问有没有好的方法,行不行???? 在这里我要声明下,男人怎么能说不行呢? 工资总表数据 上图 在这里只显示一部分。数据量为:82 模块 日常讲解模块水一下字数: pandas 下载安装 pipinstallpandas 导入 importpandas 读取Excel 在pandas中有一个方法为read_exce("Excel文件全称")l这个方法可以读取目标Excel。 然后再用head()方法返回(这么理解就行,说专业术语怕你听不懂) importpandasaspd #读取Excel df=pd.read_excel('data\salary_info.xlsx') df.head() 复制 完成以上步骤,就已经成功读取了,当然,Excel的位置不能错,要注意,不然可能会

  • LinkedHashSet 和 不重复随机数

    1.LinkedHashSet的概述和使用   llinkedHashSet的特点:是唯一能保证怎么存就怎么输出的set集合,并且去重复 1LinkedHashSet<String>linkSet=newLinkedHashSet<>(); 2/*LinkedHashSet可以保证元素唯一,并且可以保证有序(怎么存,就怎么取)*/ 3linkSet.add("f"); 4linkSet.add("a"); 5linkSet.add("b"); 6linkSet.add("c"); 7linkSet.add("c"); 8linkSet.add("d"); 9linkSet.add("e"); 10//增强for循环遍历LinkedHashSet 11for(Strings:linkSet){ 12System.out.print(s+""); 13}       //输出结果为:fabcde复制   2.产生10个1~20个随机数,要求不能重复 1HashSet<Integer>hs=newHashSet<>();//创建

  • 【C语言】经典——打印字母金字塔

    #include<stdio.h> intmain() { inti,j;//用于计数 charch; charch1='A';//从ch1开始 charch2; printf("请输入一个大写字母:"); ch=getchar(); for(i=0;i<ch-'A'+1;i++)//行数 { for(j=0;j<ch-'A'+1-i;j++)//每行的空格数 { printf(""); } for(j=0;j<2*(i+1)-1;j++) { if(j<=i)//前半段 { printf("%c",ch1+j);//通过j++实现字母的递增 ch2=ch1+j-1;//接收累加结束时最大的值 } if(j>i)//后半段 { printf("%c",ch2--);//通过ch--实现递减 } ch1='A';//重置循环初始值 } printf("\n"); } return0; }复制 注:与其它金字塔题型相比,此题较为复杂一下,在金字塔题型中更有代表性 思路:通过循环控制行数与空格数,再考虑实现字母递增(

  • vue文件下载

    leta=document.createElement("a") a.href="/static/config/file/产品服务目录.xlsx" a.download="产品服务目录.xlsx" a.style.display="none" document.body.appendChild(a) a.click() a.remove() 复制   

  • c# 复制对象

          #region复制对象 #regionMyRegion privatestaticDictionary<string,object>_Dic=newDictionary<string,object>(); publicstaticTOutTransExp<TIn,TOut>(TIntIn) { stringkey=string.Format("trans_exp_{0}_{1}",typeof(TIn).FullName,typeof(TOut).FullName); if(!_Dic.ContainsKey(key)) { ParameterExpressionparameterExpression=Expression.Parameter(typeof(TIn),"p"); List<MemberBinding>memberBindingList=newList<MemberBinding>(); foreach(varitemintypeof(TOut).GetProp

  • C#中操作Word(1)—— word对象模型介绍

    一、开发环境布置         C#中添加对Word的支持,只需添加对Microsoft.Office.Interop.Word的命名空间,如下图所示,右键点击“引用”,在弹出的“添加引用”对话框中选中COM标签页,找到“MicrosoftWord12.0ObjectLibrary”。       点击确定按钮后,可在引用中添加显示名称为Microsoft.Office.Interop.Word的引用:   二、Word的对象模型介绍     Word中共有5种常用的对象模型:应用程序对象Application、文档对象Document、Selection对象、Range对象和Bookmark对象。下图显示了Word对象模型层次结构中这些对象的一个视图。       初看起来,对象似乎重叠在一起。例如,Document和Selection对象都是Appli

  • Oracle 查看锁定表用户的SQL

    #描述:当执行如下SQL  select*FromXXXforUpdata 复制 发现表“XXX”被锁定   #只需要执行如下SQL查看锁定该表的用户 SELECTobject_name,machine,s.sid,s.serial# FROMgv$locked_objectl,dba_objectso,gv$sessions WHEREl.object_id =o.object_id ANDl.session_id=s.sid;复制 #效果图如下      

相关推荐

推荐阅读