我正在用Go读取toml文件.我希望有不同的文件系统,不仅filesystem.file个,例如filesystem.s3个,它们定义了不同的路径.但它只返回一个空 struct {map[file:{map[]}]}.我错过了什么?

我正在使用这个库读取toml文件:https://github.com/BurntSushi/toml

toml文件:

[filesystem.file]
    [filesystem.file.test]
        folder = "tmp/testdata"
    [filesystem.file.test2]
        folder = "tmp/testdata2"
[filesystem.s3]
    [filesystem.s3.test]
        folder = "s3folder/testdata"

我的go代码:

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)
}

推荐答案

输入中定义的TOML对应于顶级filesystem struct ,包含多个类型,即files3等.因此,定义等效Go struct 以解码这些 struct 的正确方法是

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"`
}

https://go.dev/play/p/lfFKVL4_1zx

Go相关问答推荐

错误.如果它包含切片,则返回FALSE

Golang文本/模板序列范围

显示GUI时后台处理功能

Golang text/template中的startswith函数 - 入门教程

Github Actions Go lambda 项目不同的 sha256sums

为什么docall在singleflight中使用go panic?

此 Golang 程序中的同步问题

使用 Go 解组 SOAP 消息

也许在 golang 中包(字符串和字符串类型不匹配)

使用 Grafana alert 在几分钟内重复alert

没有任务角色的 AWS CDK ECS 任务定义

为什么不同的 Wireguard 私钥会产生相同的公钥?

设置指向空接口的指针

GOLANG:为什么 SetDeadline/SetReadDeadline/SetWriteDeadline 在使用 os.File.Fd() 时对文件不起作用?

通过环境变量配置 OTLP 导出器

Golang Gin 绑定请求正文 XML 到 Slice

Golang模板无法访问embedFS中的文件

如何使用golang操作很长的字符串以避免内存不足

在 Golang 中获取谷歌云服务帐户的访问令牌?

使用不安全的指针从 [] 字符串中获取值