gpt4 book ai didi

go - 如何与和/或在文本/模板中短路

转载 作者:IT王子 更新时间:2023-10-29 01:14:56 26 4
gpt4 key购买 nike

我有这个 Go 模板:

{{ if and $b.Trigger $b.Trigger.Name }} 
Name is {{ $b.Trigger.Name }}.
{{ else }}
...other stuff...
{{ end }}

我正在尝试让这个模板来做:

if b.Trigger != nil && $b.Trigger.Name != "" { ...

但是它不起作用,因为 text/template godoc说,对和/或函数的参数都进行了评估。

$b.Trigger.Name被评估,它会出错,因为 $b.Trigger可以为零。所以它返回错误:

template: builds.html:24:46: executing "content" at <$b.Trigger.Name>: can't evaluate field Name in type *myType

我尝试将其重构为:

{{ if and (ne $b.Trigger nil) (ne $b.Trigger.Name "") }}

而且很奇怪,这也失败了,它说我无法将 $b.Trigger 与 nil 进行比较,这没有意义,因为该字段是指针类型:

template: builds.html:24:31: executing "content" at <ne $b.Trigger nil>: error calling ne: invalid type for comparison

有什么想法吗?

最佳答案

正如 Volker 上面提到的,嵌套 ifs:

{{if $b.Trigger}}{{if $b.Trigger.Name}}
Name is {{ $b.Trigger.Name }}.
{{end}}{{end}}

或者,更简洁:

{{with $b.Trigger}}{{with .Name}}
Name is {{.}}.
{{end}}{{end}}

不幸的是,上面的代码不会处理 else 子句。这是一种(相当丑陋的)可能性:

{{$bTriggerName := ""}}
{{with $b.Trigger}}{{$bTriggerName = .Name}}{{end}}
{{with $bTriggerName}}
Name is {{.}}.
{{else}}
...other stuff...
{{end}}

我想看看 gobuffalo/plush 是否可以更优雅地做到这一点,但截至 2019-04-30,它不能。

关于go - 如何与和/或在文本/模板中短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44582435/

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