gpt4 book ai didi

Golang 多方法接口(interface)和结构命名

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

Golang 文档提供了关于 how to name single-method interface 的明确指导(通过附加“-er”)。但是,命名一个只有一个结构实现它的多方法接口(interface)的最佳实践是什么?

在 C# 中,接口(interface)将具有“I”前缀,在 Java 中,类将具有“Impl”后缀。 Golang 是否有类似的指南?

这里有一个接口(interface)的目的是能够模拟它以对依赖它的组件进行单元测试。

这里是一个UserManager接口(interface)的具体例子。它将由 Web API Controller 使用,该 Controller 将 HTTP 请求转换为此接口(interface)上的方法调用。这个 web api Controller 将使用 UserManager 的大部分方法。

type UserManager interface { // Should it be UserManagerInterface ?
GetUser(id int) User
CreateUser(user User)
DeleteUser(id int)
ResetPassword(id int, newPassword string)
VerifyEmail(id int)
}

type UserManagerImpl struct { // -Impl, or -Struct, or something else?

}

最佳答案

从 Java/C# 到 Go 需要范式转变。

因为它们是隐式实现的,所以接口(interface)是在使用的地方定义的,而不是在实现的地方定义的。

因为它们是隐式实现的,所以较小的接口(interface)比较大的接口(interface)更受欢迎,因此关注单一方法“Verber”接口(interface)。如果您有一个需要读取字节的函数,它可以采用 io.Reader,并且可以为该函数提供具有该方法的任何类型(无论它具有什么其他方法)。您可能没有调用接口(interface)中列出的所有 5 种方法的函数(如果是这样,该函数可能做的太多了)。

如果您想将结构和接口(interface)命名为相同的东西,因此需要某种前缀/后缀,那么您可能以错误的方式思考它,可能需要重新考虑您的设计。

DBAL 是一个有时需要较大接口(interface)的真实案例的领域(尽管它可能仍应由较小的接口(interface)组成)。但在这种情况下,“Impl”并没有告诉你任何信息——Java 和 C# 喜欢拥有无意义的接口(interface),而 Go 没有。如果您只有一种实现,那么接口(interface)可能毫无用处。

如果您将有多个实现,它们之间的差异应该指导您的命名。例如,您可能有一个 PostgresUserManager、一个 MongoUserManager 和一个 MockUserManager

关于Golang 多方法接口(interface)和结构命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063010/

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