【问题标题】:Go template to print an array's lengthGo 模板打印数组的长度
【发布时间】:2021-11-25 08:41:25
【问题描述】:

我没有围棋经验。我使用了一个用 Go 编写的工具 Podman,它将其 --format 选项记录为,

-f, --format string   Format the output to a Go template or json (default "json")

我可以看到我想要什么,

podman inspect localhost/myimage --format "{{.RootFS.Layers.length}}"

但是,如果我想知道有多少元素,我该怎么办?我用.count.length.len 尝试了不同的字段,但我总是得到,

can't evaluate field FieldName in type []digest.Digest

我也尝试将其调用为{{len(RootFS.Layers)}}。我只是有点粗暴地强迫它。当我执行上述操作时,我得到,

ERRO[0000] 打印检查输出时出错:模板:所有检查:1:操作数中出现意外的“(”

获取数组元素计数的正确 Go 模板是什么?

【问题讨论】:

    标签: arrays go go-templates


    【解决方案1】:

    go templating 语言和语法与 go 语言本身不同 - 所以你看到的 len(RootFS.Layers) 不起作用。

    template docs,您使用了正确的函数len,但模板语法不需要括号。所以使用:

    {{ len .RootFS.Layers }}
    

    仅供参考:快速intro to Go templates

    【讨论】:

    • 您在此答案中根本没有解决混淆的原因:您只是在回答语法问题。混淆的原因是因为我假设我需要在模板中编写 Go Lang(我查找了如何在 Go 中获取数组的长度)。一个完整的答案将说明情况并非如此,Go Template 的语法与 Go 不同(没有括号),并且您只能调用“全局函数映射”中的函数。指出您可以添加它很棒,但这与完整答案相比是一个倒退(并且添加它并不是真正适合混淆)。
    • 为清晰起见更新了答案。我对编辑感到愤怒的原因是它建议一个仅限于全局预定义函数。不是这种情况。 go-template 语言非常强大。可以定义自己的函数、嵌套模板、管道等,以多种可重用方式转换数据。
    猜你喜欢
    • 2019-01-17
    • 2023-04-02
    • 2022-01-18
    • 2022-07-12
    • 2021-12-13
    • 2020-01-13
    • 2021-05-23
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多