web-dev-qa-db-ja.com

golangテンプレートで文字列の空の値を確認する方法

タイプmap[string]interface{}のマップから値を取得し、その文字列が空であるかどうかを確認するgolangテンプレートコードスニペットの下にこれがありますが、文字列の空のチェックは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}}
6
Tinkal Gogoi

ここにあなたがやっていることがあります(可能な場合は常にplay.golang.orgのリンクの例を与えるほうが良いです):

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

実行中のいくつかの問題:コンテキストにマップを使用している場合、インデックスをまったく使用する必要がないため、変数は必要ありません。キーが存在するかどうかを確認する場合は、ifを使用してnilエントリを確認します。マップにタイプインターフェースの要素が含まれている場合、文字列と比較することはできません。要素があることは確かであるが、それが何であるかがわからない場合にのみ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

詳細については、text/templateのドキュメントをご覧ください。

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

8
Kenny Grant

Null(nil)と比較する場合は、次を使用します: https://github.com/Masterminds/sprig/issues/53#issuecomment-48341406

{{ kindIs "invalid" $value }}