go - 如何在同一包的 2 个单独文件中拆分 GO Gorilla Mux 路由

标签 go routes gorilla mux

我有单独的文件 routes.go(包路由),我在其中存储所有路由和处理程序。 但我想把这个文件分成 2 个文件。我想将我的 routes.go 重命名为 main.go 并创建新的附加文件 moduleX.go(包路由)。 我怎样才能做到这一点? 我想将我的所有路线存储在相同“包路线”的多个文件中。

package routes

import (
	"github.com/gorilla/mux"
	"net/http"
	"github.com/---/001/models"
	"github.com/---/001/sessions"
	"github.com/---/001/utils"
	"github.com/---/001/middleware"
)

func NewRouter() *mux.Router {
	r := mux.NewRouter()
	r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
	r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")
	r.HandleFunc("/signup", signupGetHandler).Methods("GET")
	r.HandleFunc("/signup", signupPostHandler).Methods("POST")
	r.HandleFunc("/signin", signinGetHandler).Methods("GET")
	r.HandleFunc("/signin", signinPostHandler).Methods("POST")
	r.HandleFunc("/signout", signoutGetHandler).Methods("GET")
	r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
	fs := http.FileServer(http.Dir("./static/"))
	r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
	return r
}

我想将所有“/signup”和“/signin”路由和处理程序移到这个主文件之外。然后以某种方式将它们传递回此 NewRouter 函数。 您可以只提供一本书或一些在线示例。

最佳答案

您可以使用另一个修改路由器的函数来执行此操作。

//In another file
func addSignHandler(r *mux.Router) {
    r.HandleFunc("/signup", signupGetHandler).Methods("GET")
    r.HandleFunc("/signup", signupPostHandler).Methods("POST")
    r.HandleFunc("/signin", signinGetHandler).Methods("GET")
    r.HandleFunc("/signin", signinPostHandler).Methods("POST")
    r.HandleFunc("/signout", signoutGetHandler).Methods("GET")
}

并使用它:

func NewRouter() *mux.Router {
    r := mux.NewRouter()
    r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
    r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")

    addSignHandler(r)

    r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
    fs := http.FileServer(http.Dir("./static/"))
    r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
    return r
}

或者更好的是,您可以重构代码以使其更加一致:

func addMainHandler(r *mux.Router) {
    r.HandleFunc("/", middleware.AuthRequired(indexGetHandler)).Methods("GET")
    r.HandleFunc("/", middleware.AuthRequired(indexPostHandler)).Methods("POST")
    r.HandleFunc("/services", middleware.AuthRequired(servicesHandler)).Methods("GET")
    fs := http.FileServer(http.Dir("./static/"))
    r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
}

并将 NewRouter 简化为:

func NewRouter() *mux.Router {
    r := mux.NewRouter()
    addMainHandler(r)
    addSignHandler(r)
    return r
}

关于go - 如何在同一包的 2 个单独文件中拆分 GO Gorilla Mux 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48612319/

相关文章:

Gorilla mux 删除或替换现有路由

rest - 在其他端口向lang服务器发送javascript fetch API请求

go - 用go实例化一个sqlite数据库?

json - 在 Go 中从 POST 请求解码 JSON 失败

go - 在其他父方法中使用重写的父方法

go - 如何在 Travis-CI 上将 Go 项目从 Linux 交叉编译到 Windows

java - 实例化参与者而不明确知道他们的名字

asp.net-mvc - 在 ASP.NET MVC 中向 URL slugs 添加 ID 和标题

go - 将任意JSON发送到 gorilla websocket连接

ruby-on-rails-3 - Rails3 SSL 路由问题