【Go言語】go-iniでConfigファイルを読み込む

目次

はじめに

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

参考

公式ドキュメント

他の記事も閲覧いただけると嬉しいです!

あわせて読みたい
【入門】Go言語とは?メリット・デメリット、将来性は? 再来月から転職先の企業でGo言語を利用したサーバ開発を行うこととなりました。初めてGo言語を扱うので勉強を開始しようと思います!まずは、Go言語がどういう言語か、...
よかったらシェアしてね!

コメント

コメントする

CAPTCHA


目次
閉じる