如何使interface类型还原成struct类型

新手上路,请多包涵

使用Echo框架,想复用API。
于是就用了这样的方式

// Archive/service.go
type GetService struct{
    ID uint `json:"id" form:"id" null:"false"`
    result models.Archive
}
func (service *GetService)Get()*serializer.Response{//数据库操作
}
func (service *GetService)Response() *serializer.Response{
// 响应结果
}
// interface.go
type GetInterface interface {
    Get()*serializer.Response
    Response() *serializer.Response
}
// API.go
func Get(service _interface.GetInterface)echo.HandlerFunc {
    return func(c echo.Context) (err error){

        if err := c.Bind(&service); err == nil {
            if err := service.Get(); err != nil {
                return c.JSON(200, err)
            } else {
                res := service.Response()
                return c.JSON(200, res)
            }
        } else {
            return c.JSON(200, &serializer.Response{
                Status: 40001,
                Msg:    "参数错误",
                Error:  fmt.Sprint(err),
            })
        }
    }
}
// route.go
var ArchiveGet archive.GetService
g.GET("/archive/:id", api.Get(&ArchiveGet))

按照预想是后面也许有什么Novel.GetService等等其他的,到时候直接符合GetInterface方法传入API就好了。

但是发现Echo.Bind()必须要求传入Struct类型。

请问如何解决呢?

谢谢

阅读 3.6k
2 个回答
✓ 已被采纳新手上路,请多包涵

直接把Bind(&service)中的&去掉就没有这么多事了

// service是 _interface.GetInterface 类型

// serviceStruct是 GetService 类型
serviceStruct := service.(GetService)

c.Bind(&serviceStruct)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题