0
点赞
收藏
分享

微信扫一扫

Go语言读取多种格式配置文件


今天向大家介绍一个关于Go读取配置文件的相关Tool,他就是:Viper


GitHub链接:https://github.com/spf13/viper/


Go语言读取多种格式配置文件_golang

1 简介

Viper是一个完整的配置解决方案,包括12因素应用程序。它被设计为在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持:

  • 设置默认值
  • 读取JSON, TOML, YAML, HCL, envfile和Java属性配置文件
  • 实时观看和读取配置文件(可选)
  • 从环境变量中读取
  • 读取远程配置系统(etcd或Consul),并观察变化
  • 从命令行标志中读取
  • 从缓冲区读取
  • 设置显式值

Viper可以将其视为满足所有应用程序配置需求的注册表。

2 准备阶段

2.1 新建Go module,引入viper

go get github.com/spf13/viper

2.2 项目目录

Go语言读取多种格式配置文件_golang_02

3 开始使用

3.1 读取ini格式文件

文件内容:

[base]
name=ymx

代码:

package main

import (
"fmt"
"github.com/spf13/viper"
)

func main() {

viper.SetConfigName("my") // 文件名 (没有后缀的)
viper.SetConfigType("ini") // 文件类型(文件合理的后缀名)
viper.AddConfigPath("./ini_file") // 文件的目录,支持表达式,也可以增加多个
err := viper.ReadInConfig() // 对文件进行读取
if err != nil { // 读取文件失败
panic(fmt.Errorf("Fatal error config file: %w \n", err))
}

if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("没有找到配置文件")
} else {
fmt.Println("找到配置文件,但产生了另一个错误")
}
}

// 找到并成功解析了配置文件
for i := range viper.AllKeys() {
fmt.Println(viper.AllKeys()[i])
fmt.Println(viper.Get(viper.AllKeys()[i]))
}
}

输出结果:

Go语言读取多种格式配置文件_github_03

3.2 读取yaml格式文件

文件内容:

server:
port: 8080

代码:

package main

import (
"fmt"
"github.com/spf13/viper"
)

func main() {

viper.SetConfigName("my") // 文件名 (没有后缀的)
viper.SetConfigType("yaml") // 文件类型(文件合理的后缀名)
viper.AddConfigPath("./yaml_file") // 文件的目录,支持表达式,也可以增加多个
err := viper.ReadInConfig() // 对文件进行读取
if err != nil { // 读取文件失败
panic(fmt.Errorf("Fatal error config file: %w \n", err))
}

if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("没有找到配置文件")
} else {
fmt.Println("找到配置文件,但产生了另一个错误")
}
}

// 找到并成功解析了配置文件
for i := range viper.AllKeys() {
fmt.Println(viper.AllKeys()[i])
fmt.Println(viper.Get(viper.AllKeys()[i]))
}
}

输出结果:

Go语言读取多种格式配置文件_后端_04

3.3 读取properties格式文件

文件内容:

server.port=2000

代码:

package main

import (
"fmt"
"github.com/spf13/viper"
)

func main() {

viper.SetConfigName("my") // 文件名 (没有后缀的)
viper.SetConfigType("properties") // 文件类型(文件合理的后缀名)
viper.AddConfigPath("./properties_file") // 文件的目录,支持表达式,也可以增加多个
err := viper.ReadInConfig() // 对文件进行读取
if err != nil { // 读取文件失败
panic(fmt.Errorf("Fatal error config file: %w \n", err))
}

if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("没有找到配置文件")
} else {
fmt.Println("找到配置文件,但产生了另一个错误")
}
}

// 找到并成功解析了配置文件
for i := range viper.AllKeys() {
fmt.Println(viper.AllKeys()[i])
fmt.Println(viper.Get(viper.AllKeys()[i]))
}
}

输出结果:

Go语言读取多种格式配置文件_后端_05

3.4 读取json格式文件

文件内容:

{
"id": 1,
"name": "ymx"
}

代码:

package main

import (
"fmt"
"github.com/spf13/viper"
)

func main() {

viper.SetConfigName("my") // 文件名 (没有后缀的)
viper.SetConfigType("json") // 文件类型(文件合理的后缀名)
viper.AddConfigPath("./json_file") // 文件的目录,支持表达式,也可以增加多个
err := viper.ReadInConfig() // 对文件进行读取
if err != nil { // 读取文件失败
panic(fmt.Errorf("Fatal error config file: %w \n", err))
}

if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println("没有找到配置文件")
} else {
fmt.Println("找到配置文件,但产生了另一个错误")
}
}

// 找到并成功解析了配置文件
keys := viper.AllKeys()
for i := range keys {
fmt.Println(keys[i])
fmt.Println(viper.Get(keys[i]))
}
}

输出结果:

Go语言读取多种格式配置文件_开发语言_06



举报

相关推荐

0 条评论