go - 主机参数在 mux.Vars() 中不可用
问题描述
我正在使用带有通配符子域的 Gorilla mux 路由。但是,子域值未填充到mux.Vars()
. 这是我的示例程序:
package main
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
func indexHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
log.Println(vars)
fmt.Fprintf(w, "hello")
}
func main() {
router := mux.NewRouter()
router.Host("{subdomain}.localhost.com").Path("/{id}").HandlerFunc(indexHandler)
srv := &http.Server{
Handler: router,
Addr: ":8080",
}
log.Fatal(srv.ListenAndServe())
}
我正在导航到http://sub.localhost.com:8080/123
,并相应地使用此子域更新了我的/etc/hosts
文件。hello
Mux在浏览器中显示时正确地找到了这条路线。
在这种情况下,我期望vars
有两个键:subdomain
和id
,分别带有值sub
和123
。但是,当我打印 的值时vars
,输出如下:
map[id:123]
为什么subdomain
失踪?以及如何从我的处理程序访问该值?
解决方案
您的测试 URL 格式不正确。您正在使用
http://sub.localhost.com/123:8080
这会产生一个 URL 路径/123:8080
- 很可能是一个无效的 ID。
你想要:
http://sub.localhost.com:8080/123
这会产生/123
与您的路由器匹配的 URL 路径。
推荐阅读
- android - 我的播放器应用程序在某些设备上不断被杀死
- reactjs - 无法访问会话(存储的 cookie)时如何保护反应路由?
- sql - Oracle:分层查询连接方式
- sql-server - SQL Server:在单列中转换多行
- html - Jumbotron 和页脚没有延伸到手机屏幕设备的宽度
- augmented-reality - 为什么 .reality 文件的文件大小比 .usdz 大得多?
- python - learning_curve 中的自定义评分
- python - Python中有一个函数可以找到两个字典之间的差异吗?
- java - 如何在java中合并两个嵌套的HashMap
- docker - 无法从主机访问在 docker 中创建的 kafka 代理