如何将相同的逻辑应用于不同的结构?例如,更新结构的字段。我想UpdateName为结构 A 和 B 共享相同的逻辑A 和 B 来自不同的包。// model/A.gotype A struct { name string total int64 date time.Time}// model/B.gotype B struct { name string price float64 total int64 date time.Time}希望将重复的逻辑合二为一。// service/a.gofunc UpdateName(data *A) { data.Name = "NEW"}// service/b.gofunc UpdateName(data *B) { data.Name = "NEW"}我想使用一个接口进行解耦。此外,如何将接口解析为参数。type DataSetter() interface { SetName(name string) SetTotal(total int64)}感谢您帮助我解决这个基本问题。
1 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
对于像您展示的简单值分配,最好简单地公开该字段:
type A struct {
Name string
...
}
...
func f(a *A) {
a.Name="x"
}
您可能会考虑嵌入一个通用结构:
type Common struct {
Name string
}
func (c *Common) SetName(s string) {
c.Name=s
}
type A struct {
Common
...
}
type B struct {
Common
...
}
func f(a *A) {
a.SetName("x")
}
您可以使用表示通用类型功能的接口:
type WithName interface {
SetName(string)
}
func f(x WithName) {
x.SetName("x")
}
func g(a *A) {
f(a)
}
func h(b *B) {
f(b)
}
但是您不会只想为SetName.
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消