私はGoプログラミングが初めてで、疑問に思っています.Goプログラムの構成パラメーターを処理するための好ましい方法は何ですか(他のコンテキストでは、プロパティファイルまたはiniファイルを使用するようなもの)?
13 に答える
JSON形式は、私にとっては非常にうまく機能しました。標準ライブラリには、インデントされたデータ構造を記述するメソッドが用意されているため、非常に読みやすくなっています。
この golang-nuts threadも参照してください。
JSON の利点は、リストとマッピングのセマンティクス (非常に便利になる可能性があります) を提供しながら、解析が非常に簡単で、人間が読み取り可能/編集可能であることです。これは、多くの ini タイプの構成パーサーには当てはまりません。
使用例:
conf.json :
{
"Users": ["UserA","UserB"],
"Groups": ["GroupA"]
}
構成を読み取るプログラム
import (
"encoding/json"
"os"
"fmt"
)
type Configuration struct {
Users []string
Groups []string
}
file, _ := os.Open("conf.json")
defer file.Close()
decoder := json.NewDecoder(file)
configuration := Configuration{}
err := decoder.Decode(&configuration)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(configuration.Users) // output: [UserA, UserB]
ゴンフィグを見てください
// load
config, _ := gonfig.FromJson(myJsonFile)
// read with defaults
host, _ := config.GetString("service/host", "localhost")
port, _ := config.GetInt("service/port", 80)
test, _ := config.GetBool("service/testing", false)
rate, _ := config.GetFloat("service/rate", 0.0)
// parse section into target structure
config.GetAs("service/template", &template)
https://github.com/spf13/viperとhttps://github.com/zpatrick/go-configは、構成ファイル用の非常に優れたライブラリです。
この記事のようにtomlを使用して、Go の方法で構成ファイルを読み取る
golang で簡単な ini 構成ライブラリを作成しました。
ゴルーチンセーフで使いやすい
package cfg
import (
"testing"
)
func TestCfg(t *testing.T) {
c := NewCfg("test.ini")
if err := c.Load() ; err != nil {
t.Error(err)
}
c.WriteInt("hello", 42)
c.WriteString("hello1", "World")
v, err := c.ReadInt("hello", 0)
if err != nil || v != 42 {
t.Error(err)
}
v1, err := c.ReadString("hello1", "")
if err != nil || v1 != "World" {
t.Error(err)
}
if err := c.Save(); err != nil {
t.Error(err)
}
}
===================アップデート======================
最近、セクションをサポートする INI パーサーが必要になり、簡単なパッケージを作成しました。
github.com/c4pt0r/cfg
「フラグ」パッケージを使用するように INI を解析できます。
package main
import (
"log"
"github.com/c4pt0r/ini"
)
var conf = ini.NewConf("test.ini")
var (
v1 = conf.String("section1", "field1", "v1")
v2 = conf.Int("section1", "field2", 0)
)
func main() {
conf.Parse()
log.Println(*v1, *v2)
}
私はnemoに同意し、すべてを本当に簡単にするための小さなツールを書きました。
bitbucket.org/gotamer/cfgは json 構成パッケージです
- アプリケーションの設定項目を構造体として定義します。
- 構造体の json 構成ファイル テンプレートは、最初の実行時に保存されます
- 実行時の変更を構成に保存できます
例については、doc.go を参照してください。