我有两个结构,每个结构都有整数字段a,b。现在我想编写一个称为sum的函数,结果为a + b
type Type1 struct {
a int64
b int64
}
type Type2 struct {
a int64
b int64
}
func sum(details Type1) int64 {
return details.a + details.b
}
func sum2(details Type2) int64 {
return details.a + details.b
}
func main() {
type1Obj: = Type1 {}
type2Obj: = Type2 {}
sum(type1Obj)
sum2(type2Obj)
}
实际:由于类型的原因,我正在为相同的行为创建两个函数。
预期:我需要借助单个函数来解决用例。
答案 0 :(得分:1)
这是界面的经典用法。
// There is some interface that expresses the behaviors you need
type Summable interface {
A() int64
B() int64
}
// And it can be summed
func sum(s Summable) int64 {
return s.A() + s.B()
}
然后,您可以使各种类型符合Summable:
type Type1 struct {
a int64
b int64
}
// Type1 conforms to Summable
func (t Type1) A() int64 {
return t.a
}
func (t Type1) B() int64 {
return t.b
}
type Type2 struct {
a int64
b int64
}
// And so does Type2
func (t Type2) A() int64 {
return t.a
}
func (t Type2) B() int64 {
return t.b
}
然后您可以对任何Summable类型求和:
func main() {
type1Obj := Type1 {}
type2Obj := Type2 {}
println(sum(type1Obj))
println(sum(type2Obj))
}