2017-02-24 172 views
2

我在下面有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也失敗了。有沒有更好的方法來實現這一點。如何在golang模板中檢查字符串的空值

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

回答

3

這裏是你在做什麼(總是更好舉一個例子play.golang.org鏈接,如果可能的話):你在做什麼

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

的幾個問題:如果你」重新使用上下文映射,你根本不需要使用索引,所以你的變量不是必需的。如果你想檢查一個密鑰是否存在,只需用if檢查一個無入口。如果您的地圖包含界面類型的元素,則無法與字符串進行比較,只有在確定具有元素但不確定其內容時才使用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}} 

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

見文/模板的文檔,因爲他們有更多的細節:

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

+0

它非常有幫助,感謝@Kenny Grant –

1

所有你需要的,爲documented是:

{{if eq $src}} 
     <div></div> 
{{else}} 

如果您pipeline$src在這種情況下)的計算結果爲空字符串,條件不滿足。

+1

這在[confd](https://github.com/kelseyhightower/confd)模板中不適用於我。我不得不提供空字符串作爲第二個參數:'{{if ne(getv「/ foo/bar」)「」}}' – nwinkler