I'm trying to read a toml file with Go. I want to have different filesystems not only filesystem.file
but for example also filesystem.s3
, which have different paths defined. But it only returns an empty struct {map[file:{map[]}]}
. What am I missing?
I'm using this library for reading the toml file: https://github.com/BurntSushi/toml
toml file:
[filesystem.file]
[filesystem.file.test]
folder = "tmp/testdata"
[filesystem.file.test2]
folder = "tmp/testdata2"
[filesystem.s3]
[filesystem.s3.test]
folder = "s3folder/testdata"
My go code:
package main
type File struct {
Folder string `toml:"folder"`
}
type FileSystem struct {
File map[string]File `toml:"file"`
}
type Config struct {
FileSystem map[string]FileSystem `toml:"filesystem"`
}
func main() {
var conf Config
_, err := toml.DecodeFile("test.toml", &conf)
if err != nil {
log.Fatalln("Error on loading config: ", err)
}
log.Printf("config: %v", conf)
}
CodePudding user response:
The TOML defined in the input corresponds to a top level filesystem
struct, containing multiple types i.e. file
, s3
etc. So the right way to define the equivalent Go structs to decode those would be to do
type File struct {
Folder string `toml:"folder"`
}
type FileSystem struct {
File map[string]File `toml:"file"`
S3 map[string]File `toml:"s3"`
}
type Config struct {
FileSystem FileSystem `toml:"filesystem"`
}