跳转到主内容
极星编程网:以代码为星,赴技术山海!

Golang如何用通用结构体提升函数参数的多态性?

Go语言:利用通用结构体增强函数参数的多态性 Go语言以其静态类型著称,函数参数类型通常是固定不变的。然而,通过巧妙地运用通用结构体和接口,我们可以实现类似多态性的效果,允许不同类型的对象作为函数参数传入。 方法一:接口与实现 我们可以定义一个接口,然后让不同类型的数据结构实现该接口。例如,定义一个
Person
接口和
Person
结构体: 立即学习 “ go语言免费学习笔记(深入) ”;
type Person interface { DoSomething() // 定义接口方法 } type PersonStruct struct{}
接下来,创建
Man
和
Woman
结构体,并分别实现
Person
接口: go语言参考手册 中文CHM版 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译 下载
type Man struct{} func (m *Man) DoSomething() { // Man 的具体实现 } type Woman struct{} func (w *Woman) DoSomething() { // Woman 的具体实现 }
这样,
Man
和
Woman
都可以作为参数传递给接受
Person
接口类型参数的函数:
func MyFunc(p Person) { p.DoSomething() // 调用接口方法 }
方法二:直接为结构体添加方法 如果不需要定义接口,只需要为特定结构体添加相同的方法签名,也可以达到类似效果:
type Man struct{} func (m *Man) DoSomething() { // Man 的具体实现 } type Woman struct{} func (w *Woman) DoSomething() { // Woman 的具体实现 } func MyFunc(p interface{ DoSomething() }) { // 使用 interface{} 并断言 p.DoSomething() }
这种方式更直接,但灵活性略逊于接口方法。 需要注意的是,在调用
DoSomething()
之前,需要进行类型断言或类型检查,以确保
p
确实实现了
DoSomething()
方法。 通过以上两种方法,我们可以有效地提升Go语言函数参数的多态性,从而编写更灵活、更易维护的代码。 选择哪种方法取决于具体的需求和代码设计。

相关文章