如何將相同的邏輯應(yīng)用于不同的結(jié)構(gòu)?例如,更新結(jié)構(gòu)的字段。我想U(xiǎn)pdateName為結(jié)構(gòu) A 和 B 共享相同的邏輯A 和 B 來(lái)自不同的包。// 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}希望將重復(fù)的邏輯合二為一。// service/a.gofunc UpdateName(data *A) { data.Name = "NEW"}// service/b.gofunc UpdateName(data *B) { data.Name = "NEW"}我想使用一個(gè)接口進(jìn)行解耦。此外,如何將接口解析為參數(shù)。type DataSetter() interface { SetName(name string) SetTotal(total int64)}感謝您幫助我解決這個(gè)基本問(wèn)題。
1 回答

ibeautiful
TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于像您展示的簡(jiǎn)單值分配,最好簡(jiǎn)單地公開(kāi)該字段:
type A struct {
Name string
...
}
...
func f(a *A) {
a.Name="x"
}
您可能會(huì)考慮嵌入一個(gè)通用結(jié)構(gòu):
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")
}
您可以使用表示通用類(lèi)型功能的接口:
type WithName interface {
SetName(string)
}
func f(x WithName) {
x.SetName("x")
}
func g(a *A) {
f(a)
}
func h(b *B) {
f(b)
}
但是您不會(huì)只想為SetName.
- 1 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)
0/150
提交
取消