克服使用 Go 接口实现不同类型方法的冗余
在 Go 中,接口提供了一种定义通用方法签名的方法,可以由不同类型实现。虽然这允许多态性和代码重用,但当多种类型实现相同的接口时,它可能会导致冗余实现。
考虑以下场景:我们有两个结构体 First 和 Second,它们都需要实现一个接口带有 PrintStr() 方法的 A。单独在每个结构体中实现该方法是多余的。
type First struct { str string } type Second struct { str string } type A interface { PrintStr() } func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
克服冗余
我们可以创建一个封装通用的基本类型,而不是重复实现功能。然后可以将该基本类型嵌入到 First 和 Second 中,从而允许它们重用单个实现。
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() } func (w WithString) PrintStr() { fmt.Print(w.str) }
这种方法消除了冗余并保持类型安全。基类型 WithString 是对常见功能进行分组的便捷方法,可以由多种类型重用。
用法
要使用 PrintStr() 方法,我们只需创建 First 或 Second 的实例并嵌入 WithString 类型即可。
a := First{ WithString: WithString{ str: "foo", }, }
结论
通过利用基本类型和嵌入,我们可以简化以下方法的实现:实现相同接口的不同类型。这种方法可以促进代码重用、减少冗余并确保类型安全。
以上是使用Go接口时如何避免冗余方法实现?的详细内容。更多信息请关注PHP中文网其他相关文章!