比尔云BierYun--阿里云最新优惠活动
阿里云优惠码丨阿里云代金券

如何使用结构/接口构建路线?

如何使用结构/接口构建路线?

我在博客上看到了一种方法,并决定尝试使其发挥作用,到目前为止,我一直没有成功。我正在尝试使用gorilla/mux和structs / interfaces 创建路由。这里的主要问题是当结构作为函数参数传递时,我无法访问接口。

main.go:

package main

import (
    router "routers/web"
)

func main() {
    router.Serve()
}

路由器/ 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.go:

package routerweb

import (
    "controllers/web"
    "routers"
)

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

    router.Init()
}

控制器/ 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

任何想法如何解决这个问题?

你遇到的直接问题是两者都在不同的软件包中。你应该参考它controllers.ControllerInterfaceGet

未经允许不得转载:阿里云代金券 » 如何使用结构/接口构建路线?

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

强烈推荐

高性能SSD云服务器ECS抗攻击,高可用云数据库RDS