Interface 一个包中定义的接口不';我不能在另一个包里工作
我在包goQA中定义了一个简单的接口,并将其与实现该接口的结构一起使用: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
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可以重新编写为采用函数类型。看见