gpt4 book ai didi

Golang Gorilla mux,匹配两个 url 签名的最佳方式

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:54 26 4
gpt4 key购买 nike

使用 gorilla mux,我目前有许多 URL 的形式:

domain.com/org/{subdomain}/{name}/pagename

这样的代码看起来像:

rtr.HandleFunc("/org/{subdomain}/{name}/promote", promoteView)

我还想匹配:

subdomain.domain.com/{name}/pagename

我知道我可以做类似的事情

rtr.Host("{subdomain:[a-z]+}.domain.com").HandleFunc("/{name}/promote", promoteView)

匹配子域。是否可以只有一个 HandleFunc() 来匹配两种类型的 URL,或者我是否需要有两个 HandleFunc(),一个用于第一种情况,一个用于 subdomain.domain.com 情况?

最佳答案

使用这样的调度程序,您只需为每个路由器/处理程序添加一行。

package main

import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)

type key struct {
subdomain, name string
}

type dispatcher map[key]http.Handler

func (d dispatcher) ServeHTTP(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
handler, ok := d[key{vars["subdomain"], vars["name"]}]

if ok {
handler.ServeHTTP(w, r)
return
}
http.NotFound(w, r)
}

func handleA(rw http.ResponseWriter, req *http.Request) {
fmt.Fprintln(rw, "handleA serving")
}

func handleB(rw http.ResponseWriter, req *http.Request) {
fmt.Fprintln(rw, "handleB serving")
}

var Dispatcher = dispatcher{
key{"subA", "nameA"}: http.HandlerFunc(handleA),
key{"subB", "nameB"}: http.HandlerFunc(handleB),
// add your new routes here
}

func main() {
r := mux.NewRouter()
r.Handle("/org/{subdomain}/{name}/promote", Dispatcher)
r.Host("{subdomain:[a-z]+}.domain.com").Path("/{name}/promote").Handler(Dispatcher)

http.ListenAndServe(":8080", r)
}

关于Golang Gorilla mux,匹配两个 url 签名的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com