教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go语言从入门到精通 -【web项目实战篇】- 读取配置文件

Go语言从入门到精通 -【web项目实战篇】- 读取配置文件

发布时间:2021-12-26   编辑:jiaochengji.com
教程集为您提供Go语言从入门到精通 -【web项目实战篇】- 读取配置文件等资源,欢迎您收藏本站,我们将为您提供最新的Go语言从入门到精通 -【web项目实战篇】- 读取配置文件资源
<h1 id="本节核心内容">本节核心内容</h1> <ul><li>介绍 Viper</li><li>

介绍 如何配置 Viper 并读取其配置,以及配置的高级用法

<blockquote>

本小节视频教程和代码:百度网盘

可先下载视频和源码到本地,边看视频边结合源码理解后续内容,边学边练。

附带golang.org包的下载地址

</blockquote></li></ul><h1 id="viper-简介">Viper 简介</h1>

Viper 是国外大神 spf13 编写的开源配置解决方案,具有如下特性:

<ul><li>设置默认值</li><li>可以读取如下格式的配置文件:JSON、TOML、YAML、HCL</li><li>监控配置文件改动,并热加载配置文件</li><li>从环境变量读取配置</li><li>从远程配置中心读取配置(etcd/consul),并监控变动</li><li>从命令行 flag 读取配置</li><li>从缓存中读取配置</li><li>支持直接设置配置项的值</li></ul>

Viper 配置读取顺序:

<ul><li><code>viper.Set()</code> 所设置的值</li><li>命令行 flag</li><li>环境变量</li><li>配置文件</li><li>配置中心:etcd/consul</li><li>默认值</li></ul>

从上面这些特性来看,Viper 毫无疑问是非常强大的,而且 Viper 用起来也很方便,在初始化配置文件后,读取配置只需要调用 <code>viper.GetString()</code>、<code>viper.GetInt()</code> 和 <code>viper.GetBool()</code> 等函数即可。

Viper 也可以非常方便地读取多个层级的配置,比如这样一个 YAML 格式的配置:

<pre><code>common: database: name: test host: 127.0.0.1</code></pre>

如果要读取 host 配置,执行 <code>viper.GetString("common.database.host")</code> 即可。

apiserver 采用 YAML 格式的配置文件,采用 YAML 格式,是因为 YAML 表达的格式更丰富,可读性更强。

<h2 id="获取viper.set的值">获取viper.Set()的值</h2> <pre><code>func main() { //获取viper.Set() viper.Set("name","jeck") fmt.Println(viper.GetString("name")) } </code></pre>

使用viper获取Set()函数添加的值很简单,直接再Get出来就好。

<h2 id="读取配置文件">读取配置文件</h2> <pre><code>func main() { viper.AddConfigPath("conf") viper.SetConfigName("config") viper.ReadInConfig() fmt.Println(viper.GetString("common.database.host")) } </code></pre>

代码解析:

<ol><li><code>viper.AddConfigPath("conf")</code>用来指定yaml配置文件的路径</li><li><code>viper.SetConfigName("config")</code>用来指定配置文件的名称</li><li><code>viper.ReadInConfig()</code>是解析配置文件的函数,如果配置文件的路径错误获名称错误则解析失败,会报错误</li><li><code>viper.GetString("db.uri")</code>是用来从配置文件中根据层级关系来获取数据</li><li>最后,通过fmt.Println()对数据结果进行输出</li></ol><h2 id="代码优化">代码优化</h2>

使用viper读取配置文件的代码虽然很简单,但如果我们在开发中每次读取配置文件时都这样一遍遍写的话,那代码量就太大了,因此我们可以通过抽取的方式对代码进行优化,这样只需要在关键地方调用就可以了

<code>main</code> 函数通过 <code>config.Init</code> 函数来解析并 watch 配置文件(函数路径:<code>config/config.go</code>),config.go 源码为:

<pre><code>package config import "github.com/spf13/viper" //Init读取初始化配置文件 func Init() error { viper.AddConfigPath("conf") viper.SetConfigName("config") err := viper.ReadInConfig() if err != nil { return err } return nil } </code></pre>

通过将代码抽离出来,这样我们就只需要在读取配置前调用一下<code>config.Init()</code>方法就可以了。

<h1 id="viper-高级用法">Viper 高级用法</h1> <h2 id="从环境变量读取配置">从环境变量读取配置</h2>

Viper 可以从环境变量读取配置,这是个非常有用的功能。现在越来越多的程序是运行在 Kubernetes 容器集群中的,在 API 服务器迁移到容器集群时,可以直接通过 Kubernetes 来设置环境变量,然后程序读取设置的环境变量来配置 API 服务器。读者不需要了解如何通过 Kubernetes 设置环境变量,只需要知道 Viper 可以直接读取环境变量即可。

<pre><code>func main() { viper.AutomaticEnv() if env := viper.Get("GOROOT"); env == nil { println("error!") } else { fmt.Printf("%#v\n", env) } } </code></pre>

代码解析:

<ol><li><code>viper.AutomaticEnv()</code>用来读取匹配的环境变量</li><li><code>viper.Get("GOROOT")</code>获取GOPOOT的环境变量,当获取不到时,<code>env</code>为空,我们通过<code>println()</code>函数来输出格式后的<code>error</code></li><li><code>fmt.Printf("%#v\n", env)</code>输出结果</li></ol><h1 id="小结">小结</h1>

本小节展示了如何用强大的配置管理工具 Viper 来解析配置文件并读取配置,还演示了 Viper 的高级用法。

转载于:https://www.cnblogs.com/Survivalist/articles/10429498.html

到此这篇关于“Go语言从入门到精通 -【web项目实战篇】- 读取配置文件”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
想系统学习GO语言(Golang
Go语言从入门到精通 -【web项目实战篇】- 读取配置文件
VSCode配置golang开发环境
Go语言 零基础入门到精通项目实战
go语言实战教程:项目文件配置和项目初始化运行
go run main.go 参数_Go语言入门:Hello world
Go 语言到底适合干什么?
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
os.create指定路径 golang_Go语言(Golang)环境搭建详解
Go 语言十年而立,Go2 蓄势待发

[关闭]
~ ~