go - 如何在golang中编写一个函数来处理两种类型的输入数据
问题描述
我有多个struct
共享一些领域。例如,
type A struct {
Color string
Mass float
// ... other properties
}
type B struct {
Color string
Mass float
// ... other properties
}
我还有一个只处理共享字段的函数,比如说
func f(x){
x.Color
x.Mass
}
如何处理这种情况?我知道我们可以将颜色和质量转换为函数,然后我们可以使用接口并将该接口传递给函数f
。但是如果 和 的类型A
不能B
改变怎么办。我是否必须定义两个具有基本相同实现的函数?
解决方案
在 Go 中,您不像 Java、c# 等中那样使用传统的多态性。大多数事情都是使用组合和类型嵌入来完成的。一种简单的方法是更改您的设计并将公共字段分组到单独的结构中。只是思维方式不同而已。
type Common struct {
Color string
Mass float32
}
type A struct {
Common
// ... other properties
}
type B struct {
Common
// ... other properties
}
func f(x Common){
print(x.Color)
print(x.Mass)
}
//example calls
func main() {
f(Common{})
f(A{}.Common)
f(B{}.Common)
}
使用这里提到的接口和吸气剂还有其他方法,但 IMO 这是最简单的方法
推荐阅读
- python - 使用几何点获取数据以绘制热图?
- javascript - 数组:合并键和值,作为对象调用
- ms-access - 输入 500k 记录获取编译错误预期的用户定义类型不是项目
- r - 为什么 R 中的函数仅返回 R 列表绘图对象中的最后一个列表项
- flutter - Freezed 和 json_serializable:如何使用自定义转换器
- python - 如何在 Python 中终止线程子进程调用和线程退出?
- cordova - Cordova 音频插件的建议
- pytorch - 如何使用 torch 为 net.parameters() 分配特定值
- php - laravel 测试中认证失败
- javascript - 使用道具传递数据以使用谷歌地图显示折线