使用viper 进行golang 应用的配置管理
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="" 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
相关推荐
lwnylslwnyls 2020-11-06
yanzhelee 2020-10-13
guojin0 2020-10-08
佛系程序员J 2020-10-08
bluewelkin 2020-09-16
wwzaqw 2020-09-04
zhongdaowendao 2020-09-02
favouriter 2020-08-18
奎因amp华洛 2020-08-15
一青年 2020-08-13
千锋 2020-08-10
nangongyanya 2020-08-09
dongxurr 2020-08-08
明天你好 2020-08-03
kyelu 2020-08-03
Ashes 2020-08-03