非常に単純な Go Web アプリケーションを構築しようとしていますが、golang の「パッケージごとのフォルダー」構造が問題になっています。
github.com/gorilla/muxルーターとして、およびgithub.com/unrolled/renderテンプレートのレンダリングに使用しています。つまり、アプリの起動時に新しいルーターと新しいレンダラーを作成する必要があり、レンダラーにアクセスするにはすべてのルートが必要です。
これは、単一のファイルで行うのが非常に簡単です。
func main() {
...
r := render.New(render.Options{
// a lot of app specific setup
})
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
r.HTML(w, http.StatusOK, "myTemplate", nil)
})
...
}
しかし、これは私がGoを理解していないところです。サブフォルダー内の個別のファイルにルートが必要なため (私のプロジェクトは大きくなります)、routesパッケージに含める必要があります。もちろん、これによりレンダラー変数にアクセスできなくなります。呼び出しは、テンプレート フォルダーやアセット パスのヘルパーなど、大量のアプリ固有のものを渡すことに依存しているroutesため、パッケージ内にレンダラーを作成することはできません。render.New()
ハンドラー関数を、既に初期化されたレンダラーを持つ構造体で機能させるというルートをたどりました...
func (app *App) Hello2(w http.ResponseWriter, r *http.Request) {
app.Renderer.HTML(w, http.StatusOK, "myTemplate", nil)
}
しかし、 で初期化されたときにパッケージapp *App内でこれにアクセスする方法については、まだ混乱しています。ファイルのフラットなリストがあれば、Go のすべてが非常に簡単に見えますが、フォルダー構造が少し必要になるとすぐに、パッケージのセットアップが問題になります。routesmain
ここにはおそらく何かが欠けているので、助けていただければ幸いです。