gpt4 book ai didi

go - 在匿名映射中指定字段名称

转载 作者:行者123 更新时间:2023-12-01 22:35:13 25 4
gpt4 key购买 nike

我的程序从 TOML 文件中获取名为 Data 的嵌入式结构的数据:

===
[custom]
Data = [
{ filename = "fb.jpg", alt = "FB logo", url = "facebook.com" },
{ filename = "pi.jpg", alt = "Pinterest logo", url = "pinterest.com"},
{ filename = "twit.jpg", alt = "Twitter logo", url = "twitter.com"},
]
===

它被声明为接口(interface),所以我事先不知道字段名称。我想遍历行并在 HTML 中构建图像。我可以像这样成功地迭代。这显然一次打印出每一列的值:
{{ with .FrontMatter.Custom.Data }}   
{{ range $_, $value := . }}
{{ range $_, $t := $value}} {{$t}}, {{end}}
{{ end }}
{{ end }}

但是对于我的生活,我无法访问各个领域。我想这样做,但它会导致运行时错误:
            {{ range $_, $t := $value}} {{index $value "filename" }}, {{end}}

如何获取 $value.filename、$value.alt 等?

最佳答案

很难确定我的答案,因为您没有提供您正在使用的 toml 库的详细信息(我假设 BurntSushi)或它生成的数据结构(包括 fmt.Printf("%v", outVar) 的输出,其中 outVar 是与您未编码的 toml 会很有用)。

但是,如果我的假设是正确的,那么问题似乎就是这样;在您的 toml 文件中,您有 [custom]但在模板中是{{ with .FrontMatter.Custom.Data }} (注意自定义中的 c 是不同的情况)。这实际上没有任何意义,因为您说迭代有效,但使用您的模板和您提供的数据似乎一切正常(我猜缺少一些细节)。

以下示例代码按预期工作:

package main

import (
"bytes"
"fmt"
"github.com/BurntSushi/toml"
"html/template"
)

func main() {
dataToml := `
[custom]
Data = [
{ filename = "fb.jpg", alt = "FB logo", url = "facebook.com" },
{ filename = "pi.jpg", alt = "Pinterest logo", url = "pinterest.com"},
{ filename = "twit.jpg", alt = "Twitter logo", url = "twitter.com"},
]`

var data interface{}
if _, err := toml.Decode(dataToml, &data); err != nil {
panic(err)
}
fmt.Printf("data: %v\n", data)

tmpl := `{{ with .custom.Data }}
{{ range $_, $value := . }}
{{index $value "filename" }}
{{ end }}
{{ end }}`

t := template.Must(template.New("tomlStuff").Parse(tmpl))

var b bytes.Buffer
err := t.ExecuteTemplate(&b, "tomlStuff", data)
if err != nil {
panic(err)
}
fmt.Printf("%v\n", b.String())
}

我很可能错过了什么;如果是这样,也许您可​​以修改我在 go playground 中的示例这样它会重复您的问题吗?

关于go - 在匿名映射中指定字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com