Как строить маршруты со структурами / интерфейсами? - PullRequest
0 голосов
/ 09 июня 2018

Я видел метод в блоге и решил попытаться заставить его работать, но пока я потерпел неудачу.Я пытаюсь сделать маршруты с gorilla/mux и структурами / интерфейсами.Основная проблема заключается в том, что я не могу получить доступ к интерфейсам, когда структура передается в качестве параметра функции.

main.go:

package main

import (
    router "routers/web"
)

func main() {
    router.Serve()
}

routers / router.go

package router

import (
    "net/http"

    "github.com/gorilla/mux"
)

func Route(path string, ct interface{}) {
    r := mux.NewRouter()

    //ct prints {Controller:{ControllerInterfaceGet:<nil>}}

    if c, ok := ct.(ControllerInterfaceGet); ok {
        r.HandleFunc(path, http.HandlerFunc(c.Get)).Methods("GET")
    }
}

func Init() {
    http.ListenAndServe(":8080", nil)
}

маршрутизаторы / web / web.go:

package routerweb

import (
    "controllers/web"
    "routers"
)

func Serve() {
    router.Route("/", webtest.TestController{})

    router.Init()
}

controllers / controller.go:

package controllers

import (
    "net/http"
)

type Controller struct {
    ControllerInterfaceGet
}

type ControllerInterfaceGet interface {
    Get(w http.ResponseWriter, r *http.Request)
}

И, наконец, контроллер для определенного маршрута:

package webtest

import (
    "controllers"
    "net/http"
)

type TestController struct {
    controllers.Controller
}

func (p TestController) Get(w http.ResponseWriter, r *http.Request) {
    println("Hello World")
}

Я сделал некоторую отладку, и всякий раз, когда я пытаюсь скомпилировать ее, она выдает мне эту ошибку:

# routers
.\router.go:14:18: undefined: ControllerInterfaceGet

Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 09 июня 2018

Непосредственная проблема, с которой вы сталкиваетесь, заключается в том, что они находятся в отдельных пакетах.Вы должны ссылаться на него как controllers.ControllerInterfaceGet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...