viper 是一个强大的golang 配置管理包,支持多种配置格式内容的读取,同时支持读取key/value 存储的数据
而且不只是读取内容 ,同时也包含了,配置的写入操作。
以下是一个简单的demo,同时使用docker 运行

项目结构

项目使用go mod 进行包的管理

  • 目录结构
 
├── Dockerfile
├── Makefile
├── README.md
├── cmd
│ └── yaml
│ └── main.go
├── docker-compose.yaml
├── go.mod
└── go.sum

代码说明

  • go.mod
module github.com/rongfengliang/viper-app
go 1.13
require github.com/spf13/viper v1.4.0
 
  • 代码
    cmd/yaml/mai.go
package main
import (
 "bytes"
 "log"
 "github.com/spf13/viper"
)
func main() {
 viper.SetConfigType("yaml")
 var yamlExample = []byte(`
Hacker: true
name: steve
hobbies:
- skateboarding
- snowboarding
- go
clothing:
- jacket: leather
- trousers: denim
age: 35
eyes: brown
beard: true
`)
 viper.AutomaticEnv()
 if err := viper.ReadConfig(bytes.NewBuffer(yamlExample)); err != nil {
  log.Fatal("some error", err)
 }
 log.Print(viper.GetString("name"))
 viper.Set("name", "demoapp rong")
 log.Print(viper.GetString("name"))
 var appname string = viper.GetString("APIKEY")
 log.Print(appname)
}
  • Makefile
build-app: clean make-dir build-mac build-linux build-windows
clean:
 rm -rf build/*
make-dir:
 mkdir -p build/{mac,linux,windows}
build-mac:
 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o build/mac ./cmd/...
build-linux:
 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o build/linux ./cmd/...
build-windows:
 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o build/windows ./cmd/...
  • dockerfile
FROM alpine
LABEL EMAIL="1141591465@qq.com"
LABEL AUTHOR="dalongrong"
WORKDIR /app
COPY build/linux/yaml /app/yaml
RUN chmod +x /app/yaml
CMD [ "./yaml" ]
  • docker-compose 文件
version: "3"
services: 
   app:
     build: ./
     image: dalongrong/viper-app
     env_file: 
     - .env
 
 

运行&&构建

  • 本地运行
不包含环境变量的
go run cmd/yam/main.go
支持环境变量的
APIKEY=rongfengliang go run cmd/yaml/main.go
  • 容器运行
    构建镜像
 
docker-compose build

启动

docker-compose up

效果

Attaching to viper-golang_app_1
app_1 | 2019/10/30 08:56:31 steve
app_1 | 2019/10/30 08:56:31 demoapp rong
app_1 | 2019/10/30 08:56:31 rongfengliang
viper-golang_app_1 exited with code 0

说明

以上是一个简单的demo,实际功能很强大,还需要再学习官方文档了解

参考资料

https://github.com/spf13/viper
https://github.com/rongfengliang/viper-learning

使用viper 进行golang 应用的配置管理的更多相关文章

  1. Golang项目的配置管理——Viper简易入门配置

    Golang项目的配置管理--Viper简易入门配置 What is Viper? From:https://github.com/spf13/viper Viper is a complete co ...

  2. golang中的配置管理库viper

    viper简介 Viper是适用于Go应用程序的完整配置解决方案.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON,TOML,YAML,HCL,envfi ...

  3. golang中的viper示例

    这是第二次实操viper了, 年纪大了就多练练,才能记住. http://go.coder55.com/article/6589 https://github.com/spf13/viper pack ...

  4. golang常用库:配置文件解析库-viper使用

    一.viper简介 viper 配置解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 cob ...

  5. golang的配置文件操作:viper

    参考: 1.http://blog.51cto.com/13599072/2072753 2.https://studygolang.com/articles/14453 3.https://www. ...

  6. golang模块viper读取配置文件

    一.介绍 Viper是一个方便Go语言应用程序处理配置信息的库.它可以处理多种格式的配置.它支持的特性: 设置默认值 从JSON.TOML.YAML.HCL和Java properties文件中读取配 ...

  7. Go语言配置管理神器——Viper中文教程

    Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式. Viper Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用 ...

  8. viper配置管理

    安装 go get github.com/spf13/viper viper支持的功能 1.可以设置默认值 2.可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件 ...

  9. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

随机推荐

  1. Java的常用API

    Object类 1.toString方法在我们直接使用输出语句输出对象的时候,其实通过该对象调用了其toString()方法. 2.equals方法方法摘要:类默认继承了Object类,所以可以使用O ...

  2. Java静态变量初始化的坑

    class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; pu ...

  3. Java数组转集合与集合转数组的坑

    在Java中将数组转为集合,会用到Arrays.asList()的方法,然而,这个方法却与我们的预期期望存在一些出入,当用到asList方法将数组转化成List列表时,对得到的List列表进行add( ...

  4. 完全图解 HTTPS

    安全基础 我们先来看下数据在互联网上数据传递可能会出现的三个比较有代表性的问题,其实后面提到的所有方法,都是围绕解决这三个问题而提出来的. 窃听 伪造 否认 对称密钥加密 假设 A 正在通过互联网向  ...

  5. 灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM),矩阵的特征量

    又叫做灰度共现矩阵 Prerequisites 概念 计算方式 对于精度要求高且纹理细密的纹理分布,我们取像素间距为d=1d=1,以下是方向的说明: 我们来看,matlab内置工具箱中的灰度共生矩阵的 ...

  6. Django(二)模板

    一.模板概念 1.Django通过模板动态生成html 2.模板的加载位置 模板一般建立在templates文件夹中,全局路径的设置在settings.py中 ​ DIRS:决定了整个项目的模板路径的 ...

  7. Throwable中几个常见方法。

    getMessage();//获取异常信息,返回字符串.例如: toString();//获取异常类名和异常信息,返回字符串.例如: printStackTrace();//获取异常类名和异常信息,以 ...

  8. hello world之vivado程序解决方法

    体验米尔zynq系列Z-turn Board单板时,我开始用vivado.在安装vivad工程中出了一些问题,经过不懈的重新安装,终于成功了. 下面分享我用vivado设计hello world程序: ...

  9. 【转载】 使用宝塔Linux面板功能查看服务器内存使用情况

    运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对占用内存比较高的应用或者服务等,我们需要时刻关注服务器的内存使用率,是否存在内存瓶颈等情况的出现.阿里云和腾讯云官方后台界面的监控数据页面也有相 ...

  10. 英语rubyspinel红尖晶石rubyspinel单词

    红尖晶石(rubyspinel或Red spinel)其红色是因含铬而致^像红宝石和红色石榴子石一样,红 尖晶石也曾被叫作红玉,这就造成了红色宝石的混乱,因为世界上一些最大的著名“红宝 石”,如英国王 ...