在具有相同字段的结构体中使用通用函数的最佳实践
在两个结构体拥有相同字段的情况下,最好防止定义对这些字段进行操作的方法时会出现代码重复。
自定义类型作为方法接收器
推荐的方法是引入一个自定义类型(例如,Version)来服务作为方法接收者。由于所有自定义类型都可以用作方法接收器,因此此技术可以创建可应用于多个结构的单个方法。
组合
一旦自定义类型被定义后,可以使用组合将其合并到结构中。这涉及在结构中嵌入自定义类型,本质上是创建一个嵌套结构。
示例
考虑以下代码片段:
<code class="go">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 }</code>
在这里,Version 类型充当方法接收者,由于其嵌入的 Version 字段,它的 PrintVersion 方法可以被 Game 和 ERP 结构体访问。
用法
嵌入的 Version 字段可以像任何其他字段一样使用和修改:
<code class="go">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 }</code>
通过采用这种方法,可以消除与重复方法相关的代码重复,同时保持灵活性和类型安全性。
以上是在具有共享字段的结构上实现相同的方法时如何避免代码重复?的详细内容。更多信息请关注PHP中文网其他相关文章!