如何將相同的邏輯應用于不同的結構?
例如,更新結構的欄位。我想UpdateName為結構 A 和 B共享相同的邏輯
A 和 B 來自不同的包。
// model/A.go
type A struct {
name string
total int64
date time.Time
}
// model/B.go
type B struct {
name string
price float64
total int64
date time.Time
}
希望將重復的邏輯合二為一。
// service/a.go
func UpdateName(data *A) {
data.Name = "NEW"
}
// service/b.go
func UpdateName(data *B) {
data.Name = "NEW"
}
我想使用一個介面進行解耦。
此外,如何將介面決議為引數。
type DataSetter() interface {
SetName(name string)
SetTotal(total int64)
}
感謝您幫助我解決這個基本問題。
uj5u.com熱心網友回復:
對于像您展示的簡單值分配,最好簡單地公開該欄位:
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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409650.html
標籤:
