2017-05-19 6 views
2

私はGoでウェブサイトを構築しています。どのように動作し、どのように経路を処理するかは、handlefunc()で知っています。しかし、私のウェブサイトは大きくなり、私はおそらく多くのURLを持っています。問題はこのすべてをどのように扱うかです。私はmain()に100++または500+ handelfunc()を追加するだけで、それぞれの可能なルートまたはURLに一致させることはできません。どのようにそれを管理するのですか?前もって感謝します。プロジェクトが進むにつれてハンドラをoragnizeする方法は?

NOTE ::

私の質問は、任意のコードを必要としません。

答えて

0

あなたは間違いなくあなたのメインに500+ HandleFuncを入れてはいけません。

まず、プロジェクトが大きくなるにつれて、おそらくモジュールとタイプを作成します。

mainからこれらのモジュールまたはタイプに委任して、各モジュールまたはタイプがハンドル自体を登録するようにすることができます。そのような場合は、一度だけそのパターンを登録する必要があり、その後、要求を処理する機能は、に基づいて動作することができる

"/articles/{id}" 

また、おそらくあなたのURLの多くは、次のような、パターンに従いますパラメータ{id}

パターンを使用する場合はルーティングを管理するライブラリがいくつかありますが、独自のルーティングロジックをコーディングすることもできます。あなたがメインで、ルーティングを管理するためのChihttps://github.com/pressly/chi)を使用して、どこ場合は行うことができ、例えば

Wildcards in the pattern for http.HandleFunc

はその問題について、いくつかの選択肢のためにこの質問を見てみましょう

r := chi.NewRouter() 
r.Mount("/admin", adminRouter()) 

そしてあなたは/adminの下で提供されますハンドラを作成しておくことadminRouter()関数内:

func adminRouter() http.Handler { 
    r := chi.NewRouter() 
    r.Use(AdminOnly) 
    r.Get("/", adminIndex) 
    r.Get("/accounts", adminListAccounts) 
    return r 
} 

(このすべては、チーのドキュメントから取られる)

これは一例であり、あなたは別の方法を使用して、同様のロジックを実装することができます。

+0

メインにはモジュールへのハンドラがあり、各モジュールの中にはさらに深く移動し、より深くナビゲートするハンドラを追加することができますか? –

+0

はい、もっと具体的な例で私の答えを更新しました – eugenioy

+0

別のフォルダとハンドラを、例えばPythonでdjangoのような特定の関数に移動させることができますか?それとも良いアプローチではありませんか?私は自分自身のロジックを使用してchis i wanttoを使用したくないので、 –

関連する問題