go - 从不同的包golang实现接口
问题描述
我在尝试实现一个接口时遇到了一些问题,该接口在 golang 的不同包中定义。我对下面的问题做了一个最小的娱乐
界面:
package interfaces
type Interface interface {
do(param int) int
}
执行:
package implementations
type Implementation struct{}
func (implementation *Implementation) do(param int) int {
return param
}
Main.go:
package main
import (
"test/implementing-interface-in-different-package/implementations"
"test/implementing-interface-in-different-package/interfaces"
)
func main() {
var interfaceImpl interfaces.Interface
interfaceImpl = &implementations.Implementation{}
}
错误信息:
test/implementing-interface-in-different-package
./main.go:10:16: cannot use implementations.Implementation literal (type
implementations.Implementation) as type interfaces.Interface in assignment:
implementations.Implementation does not implement interfaces.Interface (missing interfaces.do method)
have implementations.do(int) int
want interfaces.do(int) int
是否可以从不同的包中实现接口?
谢谢!
解决方案
问题是您的do
函数没有从implementations
包中导出,因为它以小写字母开头。因此从包的角度来看main
,变量interfaceImpl
没有实现接口,因为它看不到do
函数。
将您的接口函数重命名为大写Do
以解决问题。
推荐阅读
- swift - 将绑定传递给子视图模型并更新它们
- javascript - 无论如何要获取作为不同变量值的变量的值
- php - php切换到界面
- java - Eclipse 和 Tomcat 停止因错误而停止
- macos - 使用 cx freeze 在 python 上构建设置在 mac os 上会出错,但在 windows 上运行良好
- javascript - Javascript:查找较大的数组并返回较小和较大的数组
- c# - 在 C# 中循环密码检查器?
- javascript - 为什么 JavaScript 在创建的对象上返回 undefined?
- java - 斜体降价的正则表达式
- bash - 如何遍历目录中的所有文件,运行脚本,并将它们写入其他目录中的匹配文件