首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将c.productService.FindAll() (类型[]service.Product的值)用作返回语句中的[]Product

不能将c.productService.FindAll() (类型[]service.Product的值)用作返回语句中的[]Product
EN

Stack Overflow用户
提问于 2022-04-10 18:27:37
回答 1查看 53关注 0票数 0

我试图在我的gin api中实现服务和控制器层。但是我在控制器中的findAll方法中得到了上面的错误。我做错什么了?控制器方法的返回类型应该是什么?

主计长:

包控制器

代码语言:javascript
复制
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()
}

服务:

包装服务

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-10 20:49:57

在两个不同的包中声明了两个Product类型,预期控制器包中的方法FindAll将返回[]controller.Product,但返回的c.productService.FindAll()类型为[]service.Product

最好在独立包中定义Product模型,并将其作为集中式类型使用。

用于使用gorm声明模型:

https://gorm.io/docs/models.html#content-inner

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71819437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档