目次
はじめに
Go言語でgo-iniを利用したConfigファイルの操作方法についてまとめます。
今回は基本的な利用法に着目して記載するので、もし詳細な利用方法を知りたい方は公式ドキュメントを参照ください。
go-iniとは?
go-iniとは設定ファイル(INIファイル)の読み込み/書き込み機能を提供するサードパーティのライブラリです。
https://github.com/go-ini/ini
このライブラリを使用することで、go言語のos標準ライブラリで一行ずつファイルを読み込むことをせずに、簡易的に設定ファイルの読み込み/書き込みを行うことが可能となります。
本記事では対象外ですが、Structへの自動マッピングのような応用的なことまで実行することができます。
事前準備
go-iniインストール
ターミナルを開き下記コマンドを実行することで、インストールできます。
go get gopkg.in/ini.v1
Configファイル作成
続いて、Configファイルを作成します。作成するファイルは拡張子を.iniにする必要があるため、注意してください。
今回は「config.ini」というファイル名でConfigファイルを作成します。
# possible values : production, development
app_mode = development
[server]
# Protocol (http or https)
protocol = http
# The http port to use
http_port = 8080
enforce_domain = true
[user]
id = test_user
password = test_password
使い方
Configファイル読み込み
ini.Load(ファイル名)
でiniファイルを読み込むことができます。
// Configファイル読み込み
cfg, err := ini.Load("config.ini")
// エラー処理
if err != nil {
fmt.Printf("Fail to read file: %v", err)
os.Exit(1) // 終了
}
読み込んだファイルから値を取り出す方法
値を取り出す場合、セクション→キーの順番で指定することで値を取得できます。
通常のケース
// 値の取得
fmt.Println("User Id:", cfg.Section("user").Key("id").String())
fmt.Println("User Password:", cfg.Section("user").Key("password").String())
▼実行結果
User Id: test_user
User Password: test_password
セクション分けされていないケース
// セクション分けされていない値を取得
fmt.Println("App Mode:", cfg.Section("").Key("app_mode").String())
▼実行結果
App Mode: development
型変換
// Int型
fmt.Printf("Port Number: (%[1]T) %[1]d\n", cfg.Section("server").Key("http_port").MustInt(9999))
// Bool型
fmt.Printf("Enforce Domain: (%[1]T) %[1]v\n", cfg.Section("server").Key("enforce_domain").MustBool(false))
▼実行結果
Port Number: (int) 8080
Enforce Domain: (bool) true
値の候補が限られるケース
// protocolはhttp、httpsのどちらか
fmt.Println("Server Protocol:",
cfg.Section("server").Key("protocol").In("http", []string{"http", "https"}))
// 候補値にない値は破棄され、デフォルト値が返却される
fmt.Println("Email Protocol:",
cfg.Section("server").Key("protocol").In("smtp", []string{"imap", "smtp"}))
▼実行結果
Server Protocol: http
Email Protocol: smtp
読み込んだファイルへの書き込み方法
値の書き換え
// 値の書き換え
cfg.Section("").Key("app_mode").SetValue("production")
// ファイル保存
cfg.SaveTo("config.ini")
▼実行結果
app_modeの値がproductionへと書き変わっていることが確認できます。
# possible values : production, development
app_mode = production
[server]
# Protocol (http or https)
protocol = http
# The http port to use
http_port = 8080
enforce_domain = true
[user]
id = test_user
password = test_password
参考
他の記事も閲覧いただけると嬉しいです!
コメント