Как разобрать конфигурацию viper для структурирования с помощью символа тире

У меня есть следующий файл конфигурации, определенный как файл Toml:

[staging]
project-id = "projectId"
cluster-name = "cluster"
zone = "asia-southeast1-a"

Тогда у меня есть эта структура

type ConfigureOpts struct {
    GCPProjectID       string `json:"project-id"`
    ClusterName        string `json:"cluster-name"`
    Zone               string `json:"zone"`
}

Обратите внимание, что у меня есть другой формат имени поля ConfigureOpts по сравнению с тем, который определен в файле конфигурации.

Я пробовал этот код, но не смог

test_opts := ConfigureOpts{}
fmt.Printf("viper.staging value %+v\n", viper.GetStringMap("staging"))
viper.UnmarshalKey("staging", &test_opts)
fmt.Printf("testUnmarshall %+v\n", test_opts)

Вот вывод

viper.staging value map[zone:asia-southeast1-a project-id:projectId cluster-name:cluster]

testUnmarshall {GCPProjectID: ClusterName: Zone:asia-southeast1-a AuthMode: AuthServiceAccount:}

1 ответ

Решение

Я получил ответ на основе этой ссылки https://github.com/spf13/viper/issues/258

Таким образом, решение было бы изменить любой json: отметить в ConfigureOpts структура для mapstructure:,

Так что это решит проблему. `` `

type ConfigureOpts struct {
    GCPProjectID       string `mapstructure:"project-id"`
    ClusterName        string `mapstructure:"cluster-name"`
    Zone               string `mapstructure:"zone"`
}

`` `

Другие вопросы по тегам