2016-06-26 7 views
1

私はゴーランに初心者です。 これを学ぶには、ginフレームワークを使用した単純なWebアプリケーションを使い始めました。 私はジン・ドキュメント&テンプレート・ファイルに従っていますが、動作させることはできません。私はエラーを取得しています -テンプレートをginフレームワークで使用するにはどうすればいいですか?

以下
panic: html/template: pattern matches no files: `templates/*` 

goroutine 1 [running]: 
html/template.Must 
    /usr/local/Cellar/go/1.5.2/libexec/src/html/template/template.go:330 
github.com/gin-gonic/gin.(*Engine).LoadHTMLGlob 
    /Users/ameypatil/deployment/go/src/github.com/gin-gonic/gin/gin.go:126 
main.main() 
    /Users/ameypatil/deployment/go/src/github.com/ameykpatil/gospike/main.go:17 

は私のコードです -

package main 

import (
    "net/http" 

    "github.com/gin-gonic/gin" 
) 

func main() { 
    //os.Setenv("GIN_MODE", "release") 
    //gin.SetMode(gin.ReleaseMode) 

    // Creates a gin router with default middleware: 
    // logger and recovery (crash-free) middleware 
    router := gin.Default() 

    router.LoadHTMLGlob("templates/*") 
    //router.LoadHTMLFiles("templates/index.tmpl") 

    router.GET("/", func(c *gin.Context) { 
     c.HTML(http.StatusOK, "index.tmpl", gin.H{ 
      "title": "GoSpike", 
     }) 
    }) 

    // By default it serves on :8080 unless a 
    // PORT environment variable was defined. 
    router.Run(":4848") 
} 

私のディレクトリ構造は、コマンドがエラーに

を与えるものではありません

- gospike 
--- templates 
------index.tmpl 
--- main.go 

go installです

実際に実行していると、上記のエラーが発生します。 & ginのgithubリポジトリに記録された同様の問題が検索されましたが、現在は閉じています。 私は様々なことを試みましたが、私は何か明白でないものを紛失していると思います。私は何が欠けていますか?

答えて

3

私は、あなたがテンプレートにアクセスするために相対ファイルパスを使用しているということを推測しています。

コードgospikeディレクトリからコンパイルして実行すると、正常に動作します。しかし、他のディレクトリからgospikeを実行すると、あなたが見たのと同じエラーが出ます。

templatesの親ディレクトリに常にgospikeを実行するか、絶対パスを使用する必要があります。あなたは、ハードコードのいずれかがそれでした:

router.LoadHTMLGlob("/go/src/github.com/ameykpatil/gospike/templates/*") 

またはあなたが何か

router.LoadHTMLGlob(filepath.Join(os.Getenv("GOPATH"), 
    "src/github.com/ameykpatil/gospike/templates/*")) 

などを行うことができますが、あなたの GOPATHに設定された複数のパスを持っている場合、それは失敗します。より良い長期的な解決策は、 TMPL_DIRのような特別な環境変数を設定してから、それを使用するだけです。

router.LoadHTMLGlob(filepath.Join(os.Getenv("TMPL_DIR"), "*")) 
+0

これは完璧に機能しました。 – ameykpatil

関連する問題