Go语言如何在main文件中正确调用service包定义的接口方法?
问题原因
- 接口方法实现错误:你当前写的
func Add(ud *CustomerdetailService)是普通函数,并未和CustomerdetailService结构体绑定,Go语言中方法的接收器需要放在func和方法名之间的参数位置,绑定后才能满足接口的实现要求。 - 接口调用方式错误:
CustomerdetailsServiceInterface是接口类型,不能直接通过接口类型本身调用方法,必须先声明实现了该接口的结构体实例,再通过实例调用对应方法。你原来的写法本质是把接口方法当成普通函数调用,需要额外传入接收器参数,所以才会提示参数不足。
修正步骤
1. 修正接口方法实现(customerDetailsService.go)
调整方法定义,将接收器放到正确位置,隐式实现接口:
package service import "fmt" type CustomerdetailService struct { } // Add 绑定到CustomerdetailService指针接收器,方法签名和接口定义完全一致,自动实现接口 func (ud *CustomerdetailService) Add() { fmt.Println("hello") }
2. 修正main.go的调用逻辑
先实例化结构体,再通过实例或者接口类型变量调用方法:
package main import ( "gitlab.com/xert/customerservice/internal/database/service" ) func main() { // 实例化实现了接口的结构体 svc := &service.CustomerdetailService{} // 写法1:直接通过实例调用方法 svc.Add() // 写法2:面向接口编程的标准写法,用接口类型变量接收实例后调用 var iSvc service.CustomerdetailsServiceInterface = svc iSvc.Add() }
内容的提问来源于stack exchange,提问作者gANDALF
相关产品推荐
相关产品推荐

