在具有相同字段的结构体中使用通用函数的最佳实践
在两个结构体拥有相同字段的情况下,最好防止定义对这些字段进行操作的方法时出现代码重复。
自定义类型作为方法接收器
推荐的方法是引入一个自定义类型(例如,Version)作为方法接收器。由于所有自定义类型都可以用作方法接收器,因此此技术可以创建可应用于多个结构的单个方法。
组合
一旦自定义类型被定义后,可以使用组合将其合并到结构中。这涉及在结构中嵌入自定义类型,本质上是创建一个嵌套结构。
示例
考虑以下代码片段:
type Version string
func (v Version) PrintVersion() {
fmt.Println("Version is", v)
}
type Game struct {
Name string
MultiplayerSupport bool
Genre string
Version
}
type ERP struct {
Name string
MRPSupport bool
SupportedDatabases []string
Version
}
这里,Version 类型充当方法接收者,由于其嵌入的 Version 字段,它的 PrintVersion 方法可以被 Game 和 ERP 结构体访问。
用法
嵌入的 Version 字段可以像任何其他字段一样使用和修改:
main() {
g := Game{
"Fear Effect",
false,
"Action-Adventure",
"1.0.0",
}
g.PrintVersion() // Version is 1.0.0
e := ERP{
"Logo",
true,
[]string{"ms-sql"},
"2.0.0",
}
e.PrintVersion() // Version is 2.0.0
}
通过采用这种方法,可以消除与重复方法相关的代码重复,同时保持灵活性和类型安全性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3