我正在尝试为我的API路由创建一个结构。我有两个结构:查询和路由。然后,我会根据我的路线类型创建一条路线。
创建路由后,然后创建一个新的路由器,并在路由范围内进行迭代,然后将它们传递给方法,路径,处理程序和查询。
在尝试传递查询时,我总是收到错误消息
不能使用route.Queries([]查询类型)作为参数中的类型字符串...
type Queries struct {
item string
useritem string
key string
userkey string
}
type Route struct {
Method string
Path string
HandleFunc http.HandlerFunc
Queries []Queries
}
var Routes = []Route{
{
Method: "GET",
Path: "/items",
HandleFunc: controllers.Getitems,
Queries: []Queries{{"item", "{useritem}", "key", "{userkey}",},
},
},
}
func CreateRouter() *mux.Router {
router := mux.NewRouter()
for _, route := range Routes {
router.
Methods(route.Method).
Path(route.Path).
Handler(route.HandleFunc).
Queries(route.Queries) //This is where the error occurs
}
return router
}
答案 0 :(得分:1)
首先将route.Queries
转换为queries []string
。
然后,您需要解压缩数组作为参数。请改用router.Queries(queries...)
。
有关此方法的实现,请参见https://github.com/gorilla/mux/blob/master/mux.go#L341。
答案 1 :(得分:0)
@mkopriva ive对此玩了一段时间,并已经实施(我认为)上面给出的建议,但是现在我得到了syntax error: unexpected ..., expecting expressiongo
这是我的代码现在的样子:
type Queries struct {
item string
useritem string
key string
userkey string
}
type Route struct {
Method string
Path string
HandleFunc http.HandlerFunc
Queries []string
}
// Routes is
var Routes = []Route{
{
Method: "GET",
Path: "/items",
HandleFunc: controllers.Getitems,
Queries: []string{
"item", "{useritem}", "key", "{userkey}",
},
},
}
// CreateRouter is
func CreateRouter() {
router := mux.NewRouter()
for _, route := range Routes {
router.
Methods(route.Method).
Path(route.Path).
Handler(route.HandleFunc).
Queries(router.Queries(...))
}
return router
}```