【问题标题】:Implementing interface from different package golang从不同的包golang实现接口
【发布时间】:2019-01-09 23:07:21
【问题描述】:

我在尝试实现一个接口时遇到了一些问题,该接口在 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

是否可以从不同的包中实现接口?

谢谢!

【问题讨论】:

标签: go interface package implementation


【解决方案1】:

问题是您的do 函数没有从implementations 包中导出,因为它以小写字母开头。因此从main包的角度来看,变量interfaceImpl没有实现接口,因为它看不到do函数。

将您的接口函数重命名为大写Do 以解决问题。

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多