在 Golang 中,如何实现来自不同包的接口?

10
我是一个有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

在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

能否从不同的包中实现接口?

谢谢!


值得注意的是,接受一个单方法 interface 的 API 可以重写为接受函数类型。请参见 https://stackoverflow.com/a/63557675/12817546。 - user12817546
1个回答

10
问题在于你的`do`函数没有从`implementations`包中导出,因为它以小写字母开头。因此从`main`包的角度来看,变量`interfaceImpl`没有实现接口,因为它无法看到`do`函数。
将您的接口函数重命名为大写字母`Do`即可解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接