9

goのテンプレートシステム(p1、p2、p3)を使用して、次のような文字列を作成しようとしています。ここで、p1、p2、...はプログラム内の配列から取得されます。私の問題は、最後の(または最初の)要素にコンマを正しく配置する方法です。

(p1、p2、p3、)を出力する私の動作していないバージョンは次のようになります。

package main

import "text/template"
import "os"
func main() { 
    ip := []string{"p1", "p2", "p3"}
    temp := template.New("myTemplate")
    temp,_ = temp.Parse(paramList)
    temp.Execute(os.Stdout, ip)

}

const paramList = 
`{{ $i := . }}({{ range $i }}{{ . }}, {{end}})`

これまでの私の最良の手がかりは、次のステートメントのhttp://golang.org/pkg/text/template/にあります。

「範囲」アクションが変数を初期化する場合、変数は反復の連続する要素に設定されます。また、「範囲」は、コンマで区切られた2つの変数を宣言する場合があります。

$index, $element := pipeline

この場合、$indexと$elementは、それぞれ配列/スライスインデックスまたはマップキーと要素の連続する値に設定されます。変数が1つしかない場合は、要素が割り当てられることに注意してください。これは、Go範囲句の規則とは逆です。インデックスが提案されている場所

これは、反復でインデックスを取得できることを示唆していますが、2つの変数を宣言する範囲の意味と、テンプレートのどこでそれらの変数が宣言されるのかを理解できません。

4

1 に答える 1

14

go-nutsメーリングリストのこの例を参照してください。このトリックの鍵の1つは、テンプレートifがGo言語とは異なることですif。ブール値を必要とするGo言語とは異なり、テンプレートはゼロの値をテストできます。魔法は{{if $index}},{{end}}、$indexが割り当てでの出現以外の宣言を必要としないところです。

于 2012-05-25T03:02:13.673 に答える