9

タイトルの通り、golangからtomlファイルを利用する方法を知りたいです。

その前に、Toml の例を示します。そうですか?

[datatitle]
enable = true
userids = [
    "12345", "67890"
]
    [datatitle.12345]
    prop1 = 30
    prop2 = 10

    [datatitle.67890]
    prop1 = 30
    prop2 = 10

そして、これらのデータを構造体の型として設定したいと思います。

その結果、以下のように子要素にアクセスしたいと思います。

datatitle["12345"].prop1
datatitle["67890"].prop2

前もって感謝します!

4

6 に答える 6

4

この問題は、推奨パッケージ BurntSushi/toml を使用して解決されました!! 私は以下のようにしましたが、それはコードの一部です。

【トムルの例】

[title]
enable = true
[title.clientinfo.12345]
distance = 30
some_id = 6

【ゴランの例】

type TitleClientInfo struct {
    Distance int    `toml:"distance"`
    SomeId  int     `toml:"some_id"`
}

type Config struct {
    Enable     bool     `toml:"enable"`
    ClientInfo map[string]TitleClientInfo `toml:"clientinfo"`
}

var config Config
_, err := toml.Decode(string(d), &config)

すると、思った通りに使えます。

config.ClientInfo[12345].Distance

ありがとう!

于 2015-12-18T03:48:48.750 に答える
0

spf13/viperを使用しています

3番目のパッケージ

状態 計画 スタート フォーク
生きている spf13/バイパー 出演者 出演者
生きている BurntSushi/トムル 出演者 出演者

バイパーの使い方

コードと設定ファイルの内容を表にしてまとめてみたのですが、明らかに編集が最終結果と一致していないので、比較しやすいように画像を載せました。

ここに画像の説明を入力


package main
import (
    "github.com/spf13/viper"
    "log"
    "os"
)
func main() {
    check := func(err error) {
        if err != nil {
            panic(err)
        }
    }
    myConfigPath := "test_config.toml"
    fh, err := os.OpenFile(myConfigPath, os.O_RDWR, 0666)
    check(err)
    viper.SetConfigType("toml") // do not ignore
    err = viper.ReadConfig(fh)
    check(err)

    // Read
    log.Printf("%#v", viper.GetString("title"))                 // "my config"
    log.Printf("%#v", viper.GetString("DataTitle.12345.prop1")) // "30"
    log.Printf("%#v", viper.GetString("dataTitle.12345.prop1")) // "30"  // case-insensitive
    log.Printf("%#v", viper.GetInt("DataTitle.12345.prop1"))    // 30
    log.Printf("%#v", viper.GetIntSlice("feature1.userids"))    // []int{456, 789}

    // Write
    viper.Set("database", "newuser")
    viper.Set("owner.name", "Carson")
    viper.Set("feature1.userids", []int{111, 222}) // overwrite
    err = viper.WriteConfigAs(myConfigPath)
    check(err)
}
title = "my config"

[datatitle]

  [datatitle.12345]
    prop1 = 30

[feature1]
  userids = [456,789]

database = "newuser"  # New
title = "my config"

[datatitle]

  [datatitle.12345]
    prop1 = 30

[feature1]
  userids = [111,222]  # Update

[owner]  # New
  name = "Carson"

于 2021-02-09T18:07:56.280 に答える