我试图在我的gin api中实现服务和控制器层。但是我在控制器中的findAll方法中得到了上面的错误。我做错什么了?控制器方法的返回类型应该是什么?
主计长:
包控制器
import (
"gin-api/service"
)
type Product struct {
Code string
Price string
}
type ProductController interface {
FindAll() []Product
}
type productController struct {
productService service.ProductService
}
func New(productService service.ProductService) ProductController {
return &productController{
productService: productService,
}
}
func (c *productController) FindAll() []Product {
return c.productService.FindAll()
}服务:
包装服务
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type Product struct {
Code string
Price string
}
type ProductService interface {
FindAll() []Product
}
type productService struct {
products []Product
}
func New() ProductService {
return &productService{}
}
func (service *productService) FindAll() []Product {
dsn := "host=localhost user=xxx password=xxx dbname=crudapi port=5432 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&Product{})
var product []Product
db.Find(product)
return product
}发布于 2022-04-10 20:49:57
在两个不同的包中声明了两个Product类型,预期控制器包中的方法FindAll将返回[]controller.Product,但返回的c.productService.FindAll()类型为[]service.Product。
最好在独立包中定义Product模型,并将其作为集中式类型使用。
用于使用gorm声明模型:
https://stackoverflow.com/questions/71819437
复制相似问题