go - 如何在 net/http 中编写 /api/v1/users/id/{id}?
问题描述
例如,我想做/api/v1/users/id/{id}
.
目前,我有这个:
mux := http.NewServeMux()
mux.Handle("/api/v1/users", HandleUsersV1{db: db, mux: mux})
log.Fatal(http.ListenAndServe(fmt.Sprintf("%s%d", ":", portNumber), mux))
我想:
mux := http.NewServeMux()
mux.Handle("/api/v1", HandleV1{})
然后在HandleV1
:
mux.HandleFunc("/users/{id}", handler)
我知道 Gorilla Mux 可以为我做这件事PathPrefix
,但我更喜欢net/http
。
解决方案
该标准net/http
不支持动态路径段,因此/{id}
不会像您想象的那样工作。至于前缀的东西,你可以使用这个https://golang.org/pkg/net/http/#StripPrefix。
v1mux := http.NewServeMux()
v1mux.HandleFunc("/users/", handler)
mux := http.NewServeMux()
mux.Handle("/api/v1/", http.StripPrefix("/api/v1", v1mux))
log.Fatal(http.ListenAndServe(fmt.Sprintf("%s%d", ":", portNumber), mux))
推荐阅读
- c - 在 C/C++ 中将结构的动态数组传递给 fun
- clickhouse - 如何在 ClickHouse 中附加多个分区?
- javascript - 正则表达式仅替换字符串中的一些 / 字符
- ruby-on-rails - Rails - 创建对象的新实例时搜索/显示可用选项
- sql - SQL subselect 语句在某些机器上非常慢
- mysql - 如何镜像自动增量值并与mysql中另一列中的值组合
- node.js - 服务器到服务器/路由到 Express 中的 Axios 请求
- python - 在电子生成器中包含文件?
- javascript - 将二进制/十六进制转换为 Base91 / Ascii85 / Base64
- firebase - Firestore array.push 不保存数据