gpt4 book ai didi

go - MyInterface 与 MyImplementation 在库的单独文件中

转载 作者:IT王子 更新时间:2023-10-29 02:22:11 26 4
gpt4 key购买 nike

项目结构需要在单独的文件中定义接口(interface)和实现。

最好下载一个独立的小测试用例来获取图片,但这里也有代码。这是一个库项目,这就是为什么 mylib 被声明为每个文件的包。我想有子包,但 golang 不允许这样做,所以我将所有内容放在一个包下,而文件位于单独的目录中。

Download Test Project

src/interfaces/my_interface.go

package mylib

type MyInterface interface {
foo()
bar()
}

src/interfaces/my_implementation.go这里怎么导入接口(interface)?

package mylib

type MyImplementation struct {}

// possible to declare *MyInteface here?
func (imp *MyImplementation) foo() {}

func (imp *MyImplementation) bar() {}

test/implementations/implementation_test.go

package implementations

import (
"testing"
"fmt"
"implementations"
mylib2 "interfaces" // why mylib2 here?
)

func TestImplementation(t *testing.T) {

// how to declare variable of type `MyInterface` and assign an object `MyImplementation` to it
interface_type_var := mylib2.MyInterface() // error
interface_type_var := mylib.MyImplementation{} // error

fmt.Println("Test successful")
}

问题

  1. 如何声明一种 MyInterface 类型并将 MyImplementation 对象分配给它。

  2. 如何在实现文件中导入和接口(interface)

  3. 当我导入接口(interface)类型时,IDE 的自动完成功能会自动将其置于 imports 下。不知道为什么。 mylib2“接口(interface)”。我知道这是一个别名,但为什么我们在这里需要别名?

  4. 请帮助修复implementation_test中的代码

最佳答案

  1. 您已经在 src/interfaces/my_interface.go 中声明了一个 MyInterface 类型。您不必重新声明它,也不必将 MyImplementation 显式分配给接口(interface)。您只需确保您的 MyImplementation 实现了接口(interface)中的所有方法。只要这两个文件位于同一包和同一文件夹级别,您的实现就会自动成为您的界面。

  2. 只要它们都在同一个包和文件夹中,您就不必在实现中导入接口(interface)

  3. 在撰写本文时,Gogland 处于抢先体验计划中,这只是 BETA 的另一个名称:)。我认为 SO 不允许对测试版中的任何内容发表评论。抱歉。

编辑

  1. 根据您的代码结构,您在尝试使用子文件夹时采取了一些错误的方法。如果您使用子文件夹,这些子文件夹应该是独立的包。假设您的 GOPATH 是 ~/go。你需要这样的结构:~/go/src/github.com/user/mylib。因此,如果您想要一个子文件夹/子包,您将拥有类似这样的东西 ~/go/src/github.com/user/mylib/util 并且 util 将是它自己的包。尝试在一个文件夹中有实现而在另一个文件夹中有接口(interface)是错误的。而是将它们按逻辑分组并创建子包。然后在您的测试中,您可以像这样使用它们:

import(
"github.com/user/mylib"
"github.com/user/mylib/util"
)

github.com 或任何其他 repo 服务非常重要,特别是如果您正在编写可在任何项目中重用的库。

除此之外,我建议使用更稳定的 IDE 或编辑器。

希望对你有帮助

关于go - MyInterface 与 MyImplementation 在库的单独文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com