1

次のルートがあります。

router.Methods("POST").Path("/my_post_01").HandlerFunc(myHandler1)
router.Methods("GET").Path("/my_get_01").HandlerFunc(myHandler2)

router.Methods("POST").Path("/my_post_02").HandlerFunc(myHandler3)
router.Methods("GET").Path("/my_get_02").HandlerFunc(myHandler4)

router.Methods("POST").Path("/my_post_03").HandlerFunc(myHandler5)
router.Methods("GET").Path("/my_get_03").HandlerFunc(myHandler6)

router.Methods("POST").Path("/my_post_04").HandlerFunc(myHandler7)
router.Methods("GET").Path("/my_get_04").HandlerFunc(myHandler8)

router.Methods("POST").Path("/my_post_05").HandlerFunc(myHandler9)
router.Methods("GET").Path("/my_get_05").HandlerFunc(myHandler10)

ルートが増えるにつれて、管理が難しくなります。

私は次のようなことをしたい:

router.Path("/my/*").HandleFunc(mypackage.RegisterHandler)

すべてのハンドラーが別のパッケージに分離されている

別のパッケージでこれらのパスを一致させる方法はありますか?

ありがとう、

4

2 に答える 2

2

idリクエスト URL から抽出し、汎用ハンドラーで処理できれば、はるかに優れたものになります。

実際、現在の状況からそれほど遠くないので、ルーターを次のように変更します。

r := mux.NewRouter()
r.Methods("POST").HandleFunc("/articles/{article_id:[0-9]+}", ArticlePostHandler)

article_idはパラメータ名で[0-9]+あり、それに一致する正規表現です。

そして、ArticlePostHandler(別のパッケージからインポートできます)で、mux.Vars次のように使用してIDを取得します。

func ArticlePostHandler(resp http.ResponseWriter, req *http.Request) {
   articleId := mux.Vars(req)["article_id"]
   // do whatever you want with `articleId`
}

ドキュメント: http://www.gorillatoolkit.org/pkg/mux

于 2015-02-06T08:55:15.693 に答える
2

ルーター用のパッケージを作成し、そのパッケージをインポートしてルートを追加できます。

ルーター

package router

var Router = mux.NewRouter()
// handle "/my/" routes
var MyRouter = Router.PathPrefix("/my").Subrouter()

別のパッケージ

import "/path/to/router"

func init() {
    router.MyRouter.Methods("POST").Path("/post_01").HandlerFunc(myHandler1)
}

主に

import "/path/to/router"

func main() {
    http.Handle("/", router.Router)

    //...
}
于 2015-02-05T21:36:49.560 に答える