Как определить карту в TOML?

Почему TOML не поддерживает определение карты? и какой самый простой способ определить строку map[string] в TOML?

Я хочу определить что-то подобное

[FOO]

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

а затем конвертировать их в строку map[string]

2 ответа

У вас могут быть такие карты:

name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }

Смотрите: https://github.com/toml-lang/toml

В вашем случае, похоже, вам нужна таблица паролей или массив карт. Вы можете сделать это так:

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

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

Или более кратко:

user_entry = [{ name = "user1", pass = "pass1" },
              { name = "user2", pass = "pass2" }]

Это работает с использованием https://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)

Используя https://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)
Другие вопросы по тегам