公式ドキュメントを読むことをお勧めします
バイパーライブラリの役割
viper は、Go アプリケーションで複数の形式 (YAML、JSON、TOML など) の設定ファイルを処理するのに適しています
。
- デフォルトを設定する
- JSON、TOML、YAML、HCL、envfile、および Java プロパティ構成ファイルからの読み取り
- 構成ファイルをリアルタイムで監視および再読み取り (オプション)
- 環境変数から読み取る
- リモート構成システム (etcd または Consul) から読み取り、変更を監視します。
- コマンドラインフラグから読み取る
- バッファから読み取る
- 明示的な値を設定する
Viper は、アプリケーション構成のすべてのニーズに対応するレジストリと考えることができます。
使用
- インストール
go get github.com/spf13/viper
- YAML 形式という名前の構成ファイルを作成します
config.yaml
。例:
database:
host: localhost
port: 5432
user: myuser
password: mypassword
- main関数を書く
package main
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
viper.SetConfigFile("config.yaml") // 设置配置文件名
viper.SetConfigType("yaml") // 设置配置文件类型
viper.AddConfigPath(".") // 设置配置文件路径
err := viper.ReadInConfig() // 读取配置文件
if err != nil {
panic(fmt.Errorf("读取配置文件失败: %s \n", err))
}
dbHost := viper.GetString("database.host") // 读取数据库主机名
dbPort := viper.GetInt("database.port") // 读取数据库端口号
dbUser := viper.GetString("database.user") // 读取数据库用户名
dbPassword := viper.GetString("database.password") // 读取数据库密码
fmt.Printf("%v %v %v %v ", dbHost, dbPort, dbUser, dbPassword)
// 使用配置信息连接数据库...
}
- 全体的な構成は次のとおりです
├─go.mod
├─config
└─main.go
バイパーにはいくつかの重要な機能もあります
viper.SetDefault(key string, value interface{})
:デフォルト値を設定します。構成ファイルの読み取り時にキーと値のペアが見つからない場合は、デフォルト値が使用されます。
viper.SetDefault("database.host", "localhost")
viper.SetDefault("database.port", 5432)
viper.GetString(key string) string
: 文字列型の構成パラメータの値を取得します。
dbHost := viper.GetString("database.host")
viper.GetInt(key string) int
: 整数型の構成パラメータの値を取得します。
dbPort := viper.GetInt("database.port")
viper.GetBool(key string) bool
: ブール型の構成パラメータの値を取得します。
debugMode := viper.GetBool("debug")
viper.GetDuration(key string) time.Duration
: 期間タイプの構成パラメータの値を取得します。
timeout := viper.GetDuration("timeout")
viper.GetStringSlice(key string) []string
: 文字列スライス タイプの構成パラメータの値を取得します。
allowedIPs := viper.GetStringSlice("security.allowed_ips")
viper.Set(key string, value interface{})
: 設定パラメータの値を設定します。
viper.Set("database.host", "db.example.com")
viper.WatchConfig()
: 構成ファイルへの変更を監視し、構成ファイルをリロードします。
viper.WatchConfig()
viper.ReadInConfig()
: 指定された構成ファイルを読み取り、解析します。
err := viper.ReadInConfig()
if err != nil {
fmt.Printf("读取配置文件失败: %s\n", err)
}
これらの関数は Viper で最もよく使用される関数の一部ですが、他にもviper.AllSettings()
、viper.IsSet()
などの便利な関数がたくさんあります。viper.Unmarshal()
Viper を使用すると、構成ファイルを手動で解析して処理することなく、アプリケーションの構成情報を簡単に読み取り、管理できます。