Interface 一个包中定义的接口不';我不能在另一个包里工作

Interface 一个包中定义的接口不';我不能在另一个包里工作,interface,go,Interface,Go,我在包goQA中定义了一个简单的接口,并将其与实现该接口的结构一起使用: type ReportWriter interface { Name() string Init(parent ITestManager) onManagerStatistics(report *ManagerResult, stats *ReporterStatistics, name, msg string) } type MongoReporter struct { } func (t

我在包goQA中定义了一个简单的接口,并将其与实现该接口的结构一起使用:

type ReportWriter interface {
    Name() string
    Init(parent ITestManager)
    onManagerStatistics(report *ManagerResult, stats *ReporterStatistics, name, msg string)
}


type MongoReporter struct {
}

func (t *MongoReporter) Name() string {
}

func (t *MongoReporter) Init(parent ITestManager) {
}

func (t *MongoReporter) onManagerStatistics(report *ManagerResult, stats *ReporterStatistics, name, msg string) {
}
然后,我可以在示例文件中创建一个变量,一切正常:

var mr goQA.ReportWriter
mr = &goQA.MongoReporter{}
问题出现在将结构移动到它自己的包mongo并导入goQA包时。除了使用包名称外,其他内容都相同:

type MongoReporter struct {
}

func (t *MongoReporter) Name() string {
}

func (t *MongoReporter) Init(parent goQA.ITestManager) {
}

func (t *MongoReporter) onManagerStatistics(report *goQA.ManagerResult, stats *goQA.ReporterStatistics, name, msg string) {
}
我尝试像以前一样在示例程序中使用struct:

var mr goQA.ReportWriter
mr = &mongo.MongoReporter{}
出现一条错误消息:

“”“”示例\example_mongo1.go:108:无法将mongo.MongoReporter文本(type*mongo.MongoReporter)用作分配中的oQA.ReportWriter类型: *mongo.MongoReporter未实现goQA.ReportWriter(缺少goQA.onManagerStatistics方法)具有mongo.onManagerStatistics(*goQA.ManagerResult,*goQA.ReporterStatistics,string,string) 想要goQA.onManagerStatistics(*goQA.ManagerResult,*goQA.ReporterStatistics,string,string)”吗

为什么会说“拥有mongo.onManagerStatistics但想要goQA.onManagerStatistics?”签名不同吗? 为什么不抱怨Init()和Name()方法呢

将Name()string方法更改为Name(i int)string后,错误为

具有名称(int)字符串 想要名称()字符串吗

没有说:

具有mongo.Name(int)字符串 需要goQA.Name()字符串吗


我不明白这里有什么错误。这看起来不像是实现接口时的一个简单错误。

包B如何提供一种类型来满足包a的接口,而该接口具有未报告的方法?完全正确:它不能。您必须导出
onManagerStatistics
,带大写字母O。

可能值得注意的是,采用单一方法
接口的API可以重新编写为采用函数类型。看见