4

HTML解析で配列の内容を表示できるGoogle App Engineを使用してGOでページを作成しようとしています。

    package hello

import (
    "fmt"
    "html/template"
    "net/http"
)

func init() {
    http.HandleFunc("/", root)
}

const TemplateHTML = `
<html>
  <body>
   <table width="700"  border="1" align="center">
  <tr>
    <td>
    {{range}} {{.name}} {{end}} {{range}} {{.Count}} {{end}}
</td>
  </tr>
</table>

  </body>
</html>
`

func root(w http.ResponseWriter, r *http.Request) {
    type variables struct {
        Name    string
        Count   int
    }
    var data = []variables{
        {"John", 25},
        {"George", 35},
        {"NoName", 27},
    }

    //name := variables{"Somebody", 25}
    tmpl, err := template.New("i").Parse(TemplateHTML)

    if err != nil {
         fmt.Fprint(w, err)
    }
    err = tmpl.Execute(w, data)
    if err != nil {
         fmt.Fprint(w, err)
    }

}

しかし、Internal Server Errorしか表示されません。

私が使用したときerr = tmpl.Execute(w, name)(コードのコメントに「名前」があります)、問題ありませんでした。

何が問題になる可能性がありますか?私はゴランが初めてです。

ありがとうございました!

4

2 に答える 2

4

他の誰かがはるかに簡潔で正確な答えで応答しますが、上記の例を機能させる簡単な方法の1つは、data宣言を次のように変更することです。

var data = []variables{
    variables{"John", 25},
    variables{"George", 35},
    variables{"NoName", 27},
}

ここでは、定義内のタイプと一致するタイプのdataスライスの各要素を作成しています。これが現在のバージョンの主な問題であると思います-適切なデータ型がに提供されていませんでした。次に、文字列が次のようになるようにテンプレートを調整する必要があります。variablesvariablesdata

const TemplateHTML = `
<html>
  <body>
   <table width="700"  border="1" align="center">
    {{range .}}
    <tr>
      <td>{{.Name}}</td><td>{{.Count}}</td>
    </tr>
    {{end}}
  </tr>
</table>

  </body>
</html>
`

ここでの主な変更点は次のとおりです。.Nameプロパティ名と一致するように大文字にし、エントリごとに新しい行が作成されるようtrにブロックをラップし{{range .}}ます(これがあなたが探していたものだと思います-そうでない場合は、range動的コンテンツが含まれていることを確認してくださいあなたが欲しい)。

于 2012-11-25T21:12:16.287 に答える
1

エラーが返された場合template.Parse、返された他の値は使用できません。tmpl.Executeテンプレートの実行が失敗した場合に nilを呼び出そうとしてtmplいるため、パニックが発生します。

于 2014-07-08T04:08:48.037 に答える