使用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类型。
请问如何解决呢?
谢谢
直接把
Bind(&service)
中的&
去掉就没有这么多事了