如何在golang模板中检查字符串的空值

Tin*_*goi 4 string go go-templates

我在golang模板代码段下面有这个代码,我在其中从类型映射中获取值,map[string]interface{}并检查该字符串是否为空,但是我的字符串空检查失败为: template: apps.html:62:29: executing "apps.html" at <eq $src "">: error calling eq: invalid type for comparison。我也尝试打印空值并将其呈现为,<nil>但是我的{{if eq $src "<nil>"}}检查也失败了,即使我放了nil它也失败了。有没有更好的方法来实现这一目标。

    {{$src := (index . "source")}}
    {{$tar := (index . "target")}}
    {{if eq $src ""}}
          <div></div>
    {{else}}
          <div style="display:none;">
              <input id="username" name="source" value="{{ $src }}"/>
              <input id="username" name="target" value="{{ $tar }}"/>
          </div>
    {{end}}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ant 5

这是您正在做的事情(如果可能,最好提供一个示例play.golang.org链接):

https://play.golang.org/p/uisbAr_3Qy

正在执行的操作存在一些问题:如果将地图用于上下文,则根本不需要使用索引,因此不需要变量。如果要检查键是否存在,只需使用if检查nil项。如果您的地图包含类型为interface的元素,则不能与字符串进行比较,仅当确定有一个元素但不确定其可能是什么时才使用eq,并将其包装在if测试中(如果不确定)密钥存在。

我认为您想做这样的事情:

{{if .source }}
  <div style="display:none;">
    <input id="username" name="source" value="{{ .source }}"/>
    <input id="username" name="target" value="{{ .target }}"/>
  </div>
{{else}}
  <div>empty</div>
{{end}}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/D2DCjAklFE

请参阅文档以获取文本/模板,因为它们有更多详细信息:

https://golang.org/pkg/text/template/#hdr-Actions