go - 如何将嵌套结构传递给参数

标签 go mux

我正在尝试为我的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
    }

最佳答案

首先将route.Queries转换为queries []string

然后,您需要解压缩数组作为参数。请改用router.Queries(queries...)

有关此方法的实现,请参见https://github.com/gorilla/mux/blob/master/mux.go#L341

关于go - 如何将嵌套结构传递给参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58788664/

相关文章:

go - 在 golang 中导入 “google/protobuf/descriptor.proto”

tomcat - 在go中解析tomcat日志文件的时间戳

go - 如何使用 channel 对 golang 管道阶段中的项目进行批处理?

go - 当处理程序达到最大客户端限制时返回错误

go - 一个通用的 http 处理程序而不是几个

api - Golang Api 只匹配最后一条路线

Golang - ToUpper() 在单个字节上?

去 <-chan overhead

go - 如何使用 Gorilla Mux 进行 URL 匹配?

api - GoLang/Mux 语法问题 : if ID, Ok = mux.Vars(r) ["ID"]; !行