【问题标题】:how to check empty value of a string in golang template如何在golang模板中检查字符串的空值
【发布时间】:2020-03-02 20:05:56
【问题描述】:

我在 golang 模板代码 sn-p 下面有这个,我从 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}}

【问题讨论】:

    标签: string go go-templates


    【解决方案1】:

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

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

    您正在做的一些问题:如果您使用地图作为上下文,则根本不需要使用索引,因此不需要您的变量。如果要检查键是否存在,只需使用 if 检查 nil 条目。如果您的地图包含接口类型的元素,则无法与字符串进行比较,仅当您确定有一个元素但不确定它可能是什么时才使用 eq,如果不确定是否密钥存在。

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

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

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

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

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

    【讨论】:

    • 它只是没有解决所提出的问题,即如何检查nil。但这是谷歌上的第一个结果。
    • 要检查 nil(上面没有用),只需使用 {{ if .foo }}
    • 另外,字符串的空值不是nil
    【解决方案2】:

    如果您想与 null(nil) 进行比较,请使用:https://github.com/Masterminds/sprig/issues/53#issuecomment-483414063

    {{ kindIs "invalid" $value }}
    

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2014-02-11
      • 2016-04-25
      • 2019-06-06
      相关资源
      最近更新 更多