如何在TOML中定义一个映射?

11
如何在TOML中定义一个映射?例如,我想定义如下内容:
[FOO]

Usernames_Passwords='{"user1":"pass1","user2":"pass2"}'

然后在Go中将它们转换为map[string]string。

2个回答

10
你可以拥有像这样的地图:
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }

参见:https://github.com/toml-lang/toml#user-content-inline-table

在你的情况下,看起来你想要一个密码表或映射数组。你可以像这样创建它:

[[user_entry]]
name = "user1"
pass = "pass1"

[[user_entry]]
name = "user2"
pass = "pass2"

更简洁地说:
user_entry = [{ name = "user1", pass = "pass1" },
              { name = "user2", pass = "pass2" }]

1
更新的文档链接:https://toml.io/en/v1.0.0#array-of-tables - Thach Van

6

这个功能使用了 github.com/BurntSushi/toml(不支持内嵌表格):

d := `
    [FOO.Usernames_Passwords]
    a="foo"
    b="bar"
    `
var s struct {
    FOO struct {
        Usernames_Passwords map[string]string
    }
}
_, err := toml.Decode(d, &s)
// check err!
fmt.Printf("%+v", s)

使用github.com/naoina/toml,可以使用内联表格来实现此目的:
d := `
    [FOO]
    Usernames_Passwords = { a = "foo" , b = "bar" }
    `
var s struct {
    FOO struct {
        Usernames_Passwords map[string]string
    }
}
err := toml.Unmarshal([]byte(d), &s)
if err != nil {
    panic(err)
}
fmt.Printf("%+v", s)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接