编译错误:通过接口调用方法

发布于 2025-01-27 00:15:22 字数 1720 浏览 6 评论 0原文

我正在学习GO界面并尝试实现以下操作,但是Vscode向我显示了汇编错误,请求帮助。我想念什么。谢谢。

package dataaccess

import (
  "../domain"
)

type IProductDataAccess interface {
    GetProducts() ([]*domain.Product, error)
    GetProduct(string) (*domain.Product, error)
}

var (
    ProductDataAccess IProductDataAccess
)

type productDAO struct{}

func init() {
    ProductDataAccess = new(productDAO)
}
func (p *productDAO) GetProduct(productID string) (*domain.Product, error) {
    return nil, nil
}
func (p *productDAO) GetProducts() ([]*domain.Product, error) {
    return nil, nil
}

从组件中对iProductDataAccess进行方法时,在编辑器中获取以下编辑错误,如下所示

在dataAccess.iproductdataaccess.getProduct中没有足够的论点 有(字符串) 想要(dataAccess.iproductdataAccess,string)(forkat argcount)

在dataAccess.iproductdataaccess.getProducts中没有足够的论点 有 () want(dataAccess.iproductDataAccess)编译器(forgationArgcount)

package service

import (
    "../dataaccess"
    "../domain"
)

type IProductService interface {
    GetProducts() ([]*domain.Product, error)
    GetProduct(string) (*domain.Product, error)
}

var (
    ProductService IProductService
)

type productService struct{}

func init() {
    ProductService = new(productService)
}

func (p *productService) GetProduct(productID string) (*domain.Product, error) {
    product, err := dataaccess.IProductDataAccess.GetProduct(productID)
    if err != nil {
        return nil, err
    }
    return product, nil
}
func (p *productService) GetProducts() ([]*domain.Product, error) {
    products, err := dataaccess.IProductDataAccess.GetProducts()
    if err != nil {
        return nil, err
    }
    return products, nil
}

I am learning go interfaces and trying to implement the below but vscode is showing me a compilation error, requesting help. What am I missing. Thank you.

package dataaccess

import (
  "../domain"
)

type IProductDataAccess interface {
    GetProducts() ([]*domain.Product, error)
    GetProduct(string) (*domain.Product, error)
}

var (
    ProductDataAccess IProductDataAccess
)

type productDAO struct{}

func init() {
    ProductDataAccess = new(productDAO)
}
func (p *productDAO) GetProduct(productID string) (*domain.Product, error) {
    return nil, nil
}
func (p *productDAO) GetProducts() ([]*domain.Product, error) {
    return nil, nil
}

Getting the following compilation errors in the editor when making the method calls on the IProductDataAccess from a component as shown below in a different package

not enough arguments in call to dataaccess.IProductDataAccess.GetProduct
have (string)
want (dataaccess.IProductDataAccess, string) (WrongArgCount)

not enough arguments in call to dataaccess.IProductDataAccess.GetProducts
have ()
want (dataaccess.IProductDataAccess)compiler (WrongArgCount)

package service

import (
    "../dataaccess"
    "../domain"
)

type IProductService interface {
    GetProducts() ([]*domain.Product, error)
    GetProduct(string) (*domain.Product, error)
}

var (
    ProductService IProductService
)

type productService struct{}

func init() {
    ProductService = new(productService)
}

func (p *productService) GetProduct(productID string) (*domain.Product, error) {
    product, err := dataaccess.IProductDataAccess.GetProduct(productID)
    if err != nil {
        return nil, err
    }
    return product, nil
}
func (p *productService) GetProducts() ([]*domain.Product, error) {
    products, err := dataaccess.IProductDataAccess.GetProducts()
    if err != nil {
        return nil, err
    }
    return products, nil
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流年里的时光 2025-02-03 00:15:22

这条线看起来需要调整:

product, err := dataaccess.IProductDataAccess.GetProduct(productID)

dataAccess.iproductDataAccess是接口,而不是调用调用的实际对象。 dataAccess.productDataAccess是该页面上的单例实例,您要调用的内容。

我认为您真的想要:

product, err := dataaccess.ProductDataAccess.GetProduct(productID)

类似地呼吁使用:

products, err := dataaccess.ProductDataAccess.GetProducts()

This line looks like it needs adjustment:

product, err := dataaccess.IProductDataAccess.GetProduct(productID)

dataaccess.IProductDataAccess is an interface, not an actual object to invoke a call on. dataaccess.ProductDataAccess is the singleton instance on that page that what you want to invoke.

I think you really want:

product, err := dataaccess.ProductDataAccess.GetProduct(productID)

Similarly for the GetProducts call:

products, err := dataaccess.ProductDataAccess.GetProducts()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文