
Go语言中使用公共结构体定义函数参数并兼容不同类型
本文探讨如何在Go语言中利用公共结构体定义函数参数,并使其兼容不同类型。假设我们已定义以下结构体:
type Person struct{}type Man struct{ Person }type Woman struct{ Person }
我们需要一个函数 process,其参数类型为 Person,但同时能够接受 Man 和 Woman 类型的实例作为参数。
方法一:接口实现
立即学习“go语言免费学习笔记(深入)”;
定义一个接口,让 Man 和 Woman 实现该接口:
type PersonProcessor interface { Process(p Person)}type Man struct{ Person }func (m *Man) Process(p Person) {}type Woman struct{ Person }func (w *Woman) Process(p Person) {}func process(pp PersonProcessor) {}
通过 PersonProcessor 接口,process 函数可以接受实现了该接口的任何类型,包括 Man 和 Woman。
方法二:嵌入式结构体和方法
直接在嵌入式结构体中定义方法:
type Person struct{}type Man struct { Person}func (m *Man) Process(p Person) {}type Woman struct { Person}func (w *Woman) Process(p Person) {}func process(p Person) {}
由于 Man 和 Woman 嵌入 Person 结构体,它们都拥有 Person 的所有字段和方法。 我们直接在 Man 和 Woman 上定义 Process 方法, process 函数可以直接使用 Person 类型参数,并接受 Man 和 Woman 实例。
方法选择建议:
如果需要对不同类型进行不同的处理逻辑,方法一(接口实现)更清晰,更有利于代码维护和扩展。如果所有类型对 Person 的处理逻辑相同,方法二(嵌入式结构体和方法)更简洁。 选择哪个方法取决于具体的应用场景和代码设计需求。
以上就是Go语言中如何用公共结构体定义函数参数并兼容不同类型?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1383506.html
微信扫一扫
支付宝扫一扫