Go读取yaml文件到struct类

1、yaml文件准备

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

2、config配置类准备

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

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

代码:

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

type Common struct {
   // 密钥id。密钥可前往官网控制台 http://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)

}
周钦雄技术分享
本文转载于网络 如有侵权请联系删除

相关文章

  • 记录一次腾讯云轻量挂载数据盘的过程

    本文将以CentOS8.0操作系统为例,不同操作系统的格式化操作可能不同,本文仅供参考。请根据您实际使用场景选择初始化方式:若整块硬盘只呈现为一个独立的分区(即不存在多个逻辑盘,如vdb1和vdb2),强烈推荐您不使用分区,直接 在裸设备上构建文件系统。若整块硬盘需要呈现为多个逻辑分区(即存在多个逻辑盘),则您需要先进行分区操作,再 在分区上构建文件系统。在裸设备上构建文件系统登录轻量应用服务器,详情请参见 使用WebShell方式登录Linux实例。执行以下命令,查看磁盘名称。sudofdisk-l复制回显信息类似如下图,表示当前轻量应用服务器有两块磁盘,/dev/vda 为40GB的系统盘,/dev/vdb 为20GB的数据盘。 执行以下命令,对 /dev/vdb 裸设备直接创建文件系统格式。sudomkfs-t<文件系统格式>/dev/vdb 不同文件系统支持的分区大小不同,请根据实际需求合理选择文件系统。以设置文件系统为 EXT4 为例,则执行以下命令: sudomkfs-text4/dev/vdb 注意 格式化需要等待一段时间,请观察系统运行状态,不要退出。执行

  • ICCV 2021 UVO Challenge 双冠军比赛复盘

    作者:lucasdu|已授权转载(源:知乎) https://zhuanlan.zhihu.com/p/422929082这次带队参加了ICCV2021的UVO(UnidentifiedVideoObjects)Challenge,本次比赛共有两个赛道,分别为基于图片的开放世界实例分割和基于视频的开放世界实例分割。我们运气不错,拿下了本次比赛两个赛道的冠军。以下为本次比赛介绍和我们的方法简介。细节报告请参见:Track1:https://arxiv.org/abs/2110.10239 Track2:https://arxiv.org/abs/2110.11661 Code&Models:https://github.com/dulucas/UVO_Challenge 比赛简介:动机---现有的实例分割方法在一些benchmarks上已经达到了很高的精度。但这些方法常常局限于封闭世界,例如实例分割中常用到的COCO数据集,只标注了来自80个类别的物体,对不属于这80个类的物体均不予标注。而我们生活中往往面临的问题是开放的,物体会来自于成千上万种类别。人类在面对新物体(unsee

  • 前端的Nginx知识梳理

    本文已获得原作者的独家授权,有想转载的朋友们可以在后台联系我申请开白哦!PS:欢迎掘友们向我投稿哦,被采用的文章还可以送你掘金精美周边!因为开发中有很多环境,开发环境,测试环境,预生产环境等,所以会经常会用到nginx来配置代理。但是我也只是会用,想仔细梳理一下nginx的知识。1.什么是Nginx2.Nginx应用场景3.安装Nginx4.命令5.Nginx配置6.反向代理7.Nginx管理虚拟主机7.1基于域名的虚拟主机1、在http大括号中添加如下代码段:server{ #监听端口80 listen80; #监听域名feng.com; server_namefeng.com; location/{ #相对路径,相对nginx根目录。也可写成绝对路径 rootfeng; #默认跳转到index.html页面 indexindex.html; } } 复制2、切换安装目录:cd/usr/local/software/nginx3、创建目录:mkdirfeng4、新建index.html文件:vi/usr/local/software/nginx/feng/index.html

  • HDOJ 2099 整除的尾数

    ProblemDescription 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?Input 输入数据有若干组,每组数据包含二个整数a,b(0<a<10000,10<b<100),若遇到00则处理结束。Output 对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。SampleInput 20040 199295 00SampleOutput 004080 15注意:特别注意输出格式!!! 还有后面2位数小于10的输出!! 例:000504importjava.util.Scanner; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); while(sc.hasNext()){ inta=sc.nextInt(); intb=sc.nextInt(); if(a==0&&b==0){ return; } a=a*1

  • 组合查询

    组合查询开发工具与关键技术:MVC作者:盘洪源撰写时间:2019年6月4日星期二什么是组合查询,就是通过多个条件来查询的数据就是组合查询,如下图查询项目里面放着一个下拉框,下拉框里面每一项要对应到相应的查询内容这样才查询到内容,就比如说项目这里选到了款号了,查询内容就要写对应的款号内容,就不要写颜色这些。想要实现这个效果需要怎么做?首先这个表格的初始化就不说了,点击搜索按钮相当于数据表格的重载,如下functionselect(){ var Putaway=$("#Putaway").prop("checked"); var cont=$("#contID").val(); varXianmuID= $("#XianmuID").val(); url: "/EverydayAffair/ShopAdministration/SelectShop"; ShopAdministion=layuiTable.reload("ShopAdministion",

  • <track>标签

    用途 <track>标签为诸如video元素之类的媒介规定外部文本轨道。用于规定字幕文件或其他包含文本的文件,当媒介播放时,这些文件是可见的。标准属性属性描述HTML5default规定该轨道是默认的,假如没有选择任何轨道。✔kind表示轨道属于什么文本类型。✔label轨道的标签或标题。✔src轨道的URL。✔srclang轨道的语言,若kind属性值是“subtitles”,则该属性必需的。✔变更点<track>标签是HTML5的新标签。

  • 004.Zabbix3.x-Server服务端安装

    一环境基础1.1部署基础环境部署Zabbix需要LAMP或LANP环境,数据库可以为MySQL或者MariaDB。硬件及存储条件按需配置。1.2常见依赖列表Web前端需要支持的软件环境如下:软件版本描述Apache1.3以上主程序PHP5.3以上主程序PHP扩展库gd2.0以上PHPGD扩展库需支持PNG/JPEG/FreeType2bcmathphp-bcmath(--enable-bcmath)ctypephp-ctype(--enable-ctype)libXML2.6以上php-xmlxmlreaderphp-xmlreaderxmlwriterphp-xmlreadersessionphp-net-socketsocketsphp-net-socket(--enable-sockets)mbstringphp-mbstring(--with-gettext)ibm_db2使用DB2虚此支持mysqli使用MySQL需此支持oci8使用oracle需此支持pgsql使用postgresql需此支持sqlite3使用sqlite需此支持注意:如是RHEL系统,自带的RPM包可能缺

  • 威胁情报大会直击 | 企业IT部王森:腾讯企业终端安全管理最佳实践

    8月29日,2018网络安全分析与情报大会在北京新云南皇冠假日酒店正式开幕,本次大会由国内威胁情报领军企业微步在线主办,十数位来自政府、央企、金融、互联网等一线公司的安全专家将对威胁情报的落地应用进行多点发散的深度剖析,来自国内外顶级安全公司的学者、研究员也将根据全球威胁态势,结合自身业务分享最新溯源对象和研究成果,拓宽网络威胁分析的时间空间跨度,与参会者共同探讨威胁情报应用落地的典型行业、场景和解决方案。腾讯企业IT部安全运营中心信息安全组组长、高级工程师王森出席本次大会,并在会上发表《腾讯企业终端安全管理最佳实践》的主题演讲,以下为王森演讲全文:今天我的分享主要有三个内容:腾讯这样一个体量的互联网企业日常面临的安全风险和挑战都有哪些,在座的各位专家是否也有共鸣。腾讯经过十几年的安全建设,应对这些挑战的时候实践的理念是什么,这些理念和思路在有些企业没有办法快速落地,腾讯通过自己的技术积累有什么成熟的产品可以输出给行业帮助到大家。这里列出了腾讯内网的三大安全挑战:首先是钓鱼邮件,2016年一直到今年,整个行业面临的钓鱼邮件态势应该是差不多的,非常严重的就是勒索软件,其实勒索软件的鼻祖级

  • 李银河做了场“性”直播,引起了大家的xing趣

    前几天男性杂志《GQ》发表了一篇文章,《追踪三个月,看MC天佑如何统治直播江湖》,讲述了YY上的喊麦之王MC天佑的故事。MC天佑是一个充满争议的网红,知乎上有人问“如何评价直播平台上的喊麦,到底有啥可看的?”排名第一的回答是:“有人喜欢去巴黎喂鸽子,就会有人在村口逗黄狗”。就是说,许多人尤其是自认为阳春白雪的人,对MC天佑的内容是嗤之以鼻的,因为太俗,然而即便许多人看不上,也丝毫无法阻挡MC天佑红得发紫,在直播热潮中赚得钵满盆满。 直播内容究竟是俗还是雅好?当人们还在对这个问题争论不休时,YY近日又迎来一场备受争议的直播:邀请中国性学研究第一人,社会学家李银河来做直播。整场直播主题只有一个字:性。看到这个直播,我当时有大跌眼镜的感觉。朋友圈有人说,YY直播内容怎么越来越俗?也有人说,李银河为什么也来趟一场浑水?李银河做直播只为个人情怀我是李银河老师的忠实读者,对其研究领域很感兴趣,且其文章将很学术的问题写得通俗易懂,这是难能可贵的。李银河老师之前也一直在与公众互动沟通,比如开通微博和微信公众账号。然而,这位搞研究的社会学家,会去做网络直播,是我没想到的。传统理学文化影响了中国很多年,虽

  • Flash/Flex学习笔记(23):运动学原理

    先写一个公用的小球类Ball:package{ importflash.display.Sprite; //小球类 publicclassBallextendsSprite{ privatevarradius:Number;//半径 privatevarcolor:uint;//颜色 publicfunctionBall(r:Number=50,c:uint=0xff0000){ this.radius=r; this.color=c; init(); } privatefunctioninit():void{ graphics.beginFill(color); graphics.drawCircle(0,0,radius); graphics.endFill(); } } }复制圆周运行与椭圆运动:主要依靠三角函数结合椭圆公式计算对象的x,y坐标varball:Ball=newBall(5,0xff0000); varball2:Ball=newBall(8,0x0000ff); addChi

  • platform_driver_register( )过程追踪

    大家好,又见面了,我是你们的朋友全栈君。 以下代码源于linux3.1.9。platform_driver_register()是内核中非常著名的函数。platform_driver_register()负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe()。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。 { 。。。 returnplatform_driver_register(&bcm2708_i2c_driver);。。。 }intplatform_driver_register(structplatform_driver*drv) { 。。。 returndriver_register(&drv->driver); }intdriver_register(structdevice_driver*drv) { 。。。 ret=bus_add_driver(drv);//platform是一个虚拟总线 。。。 }intbus_add_driver(structdevice_driver*dr

  • java内存模型(二)深入理解java内存模型的系列好文

    深入理解java内存模型(一)——基础 深入理解java内存模型(二)——重排序 深入理解java内存模型(三)——顺序一致性 深入理解java内存模型(四)——volatile 深入理解java内存模型(五)——锁 深入理解java内存模型(六)——final 深入理解java内存模型(七)——总结

  • Codeforces Round #FF(255) DIV2

    A-DZYLovesHash 水题,开辟一个数组即可 #include<iostream> #include<vector> #include<algorithm> #include<string> usingnamespacestd; intmain(){ intp,n; cin>>p>>n; vector<bool>buckets(302,false); boolflag=false; vector<int>x(n); for(inti=0;i<n;++i)cin>>x[i]; inti=0; for(i=0;i<n;++i){ if(!buckets[x[i]%p])buckets[x[i]%p]=true; else{cout<<i+1<<endl;break;} } if(i>=n)cout<<-1<<endl; }复制 开辟一个数组即可 B-DZYLovesStrings 先把给定的字符的值求

  • TensorFlow从1到2(八)过拟合和欠拟合的优化

    《从锅炉工到AI专家(6)》一文中,我们把神经网络模型降维,简单的在二维空间中介绍了过拟合和欠拟合的现象和解决方法。但是因为条件所限,在该文中我们只介绍了理论,并没有实际观察现象和应对。 现在有了TensorFLow2.0/Keras的支持,可以非常容易的构建模型。我们可以方便的人工模拟过拟合的情形,实际来操作监控、调整模型,从而显著改善模型指标。 从图中识别过拟合和欠拟合 先借用上一篇的两组图: 先看上边的一组图,随着训练迭代次数的增加,预测的错误率迅速下降。 我们上一篇中讲,达到一定迭代次数之后,验证的错误率就稳定不变了。实际上你仔细观察,训练集的错误率在稳定下降,但验证集的错误率还会略有上升。两者之间的差异越来越大,图中的两条曲线,显著分离了,并且分离的趋势还在增加。这就是过拟合的典型特征。 这表示,模型过分适应了当前的训练集数据,对于训练集数据有了较好表现。对于之外的数据,反而不适应,从而效果很差。 这通常都是由于较小的数据样本造成的。如果数据集足够大,较多的训练通常都能让模型表现的更好。过拟合对于生产环境伤害是比较大的,因为生产中大多接收到的都是新数据,而过拟合无法对这

  • 笔记本电脑扩展屏幕或设备后不能播放声音

    笔记本在扩展外接显示屏或蓝牙连接外设音响时播放音频没有声音 此时是电脑的默认播放设备被修改了,右击桌面右下角的小喇叭,选择播放设备(P),然后选择你的音响设备即可

  • js 动态获取对象多级属性

    varobj={ f1:{f2:{f3:2}} } varkey="f1.f2.f3" varvalue=eval("obj."+key); console.log(value);复制  来点变态的   varobj={ f1:{ f2:{ f3:2, '/test/@xxx':'testxxx' } } } varkey="f1.f2['/test/@xxx']" varvalue=eval("obj."+key); console.log(value);复制  

  • MFC中多线程总结

    前言 对于写MFC界面来说,如果某个消息映射函数流程执行时间太长,有太多的Sleep()和While(1)会导致线程时间过长,MFC界面卡死,因此需要学会用多线程 思路 1.创建流程2.创建线程调用的函数3.结束线程 第一步:创建线程 CWinThread*m_pThread; m_pThread=nullptr; m_pThread=AfxBeginThread(LoadNlpDict,this);//LoadNlpDict是调用的函数 复制 第二步:线程调用的函数:此函数必须是个静态或者是不属于该类的函数 UINTLoadNlpDict(LPVOIDlpParam); 复制 关于创建线程: CWinThread*MyThread=AfxBeginThread(MyFunction,pParam,THREAD_PRIORITY_NORMAL,0,0,NULL); //MyThread是定义的线程指针 //MyFunction是调用函数 //pParam调用函数内LPVOID参数,作为传线程参数 //THREAD_PRIORITY_NORMAL是线程优先级,一般置0,和主线程

  • 判断是否为空

    判断一个变量是否为空的时候要注意这个变量是否为字符串类型,字符串类型的话,Strings;s=null和s=""都是表示为空,要进行判断。      

  • 【模板】【P1182】数列分段II——二分答案

    题意:给定一列数,分成m段,使每段和的最大值最小。     考虑二分最小段和size,答案显然满足单调性。可以在每次check中累加数列元素判断当前组的总和是否在size以内。由于序列元素均为非负整数,前缀和数组的值满足非严格单调递增,那么可以在前缀和上再套一个二分来优化暴力累加的过程。   我不知道优化以后的复杂度怎么分析,反正它跑的快多了 代码: #include <iostream>   #include <cstdio>   #define maxn 100010    using namespace std;   int a[maxn], n, m;   long long s[maxn];   bool div(int sum) {    &n

  • 注册博客的第一天,纪念一下

    2015.11.25 周三 21:30

  • 123. 买卖股票的最佳时机 III——动态规划-股票收益问题

    """123.买卖股票的最佳时机III给定一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices=[3,3,5,0,0,3,1,4]输出:6解释:在第4天(股票价格=0)的时候买入,在第6天(股票价格=3)的时候卖出,这笔交易所能获得利润=3-0=3。随后,在第7天(股票价格=1)的时候买入,在第8天(股票价格=4)的时候卖出,这笔交易所能获得利润=4-1=3。示例2:输入:prices=[1,2,3,4,5]输出:4解释:在第1天(股票价格=1)的时候买入,在第5天(股票价格=5)的时候卖出,这笔交易所能获得利润=5-1=4。注意你不能在第1天和第2天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。示例3:输入:prices=[7,6,4,3,1]输出:0解释:在这个情况下,没有交易完成,所以最大利润为0。示例4:输入:prices=[1]输出:0""""""dp[i][k]

相关推荐

推荐阅读