使用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
相关推荐
chensen 2020-11-14
lwnylslwnyls 2020-11-06
ATenhong 2020-10-15
yanzhelee 2020-10-13
佛系程序员J 2020-10-10
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