2017-02-24 11 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で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}} 

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

彼らはより多くの詳細を持っているように、テキスト/テン​​プレートのドキュメントを参照してください。

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

+0

本当に有益な、ケニー・グラント –

1

必要なのは、documentedとして、次のとおりです。

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

あなたpipeline(この場合は$src)は条件が失敗した空の文字列に評価された場合。ここで

+1

この[confd](https://github.com/kelseyhightower/confd)テンプレートで私のために働かなかった。空の文字列を2番目のパラメータとして指定しなければなりませんでした。 '{{if ne(getv"/foo/bar ")"}} ' – nwinkler

関連する問題