HUH函數(shù)
2023-06-26 15:35:00
我有多個(gè)struct共享一些字段。例如,type A struct { Color string Mass float // ... other properties}type B struct { Color string Mass float // ... other properties}我還有一個(gè)只處理共享字段的函數(shù),比如說(shuō)func f(x){ x.Color x.Mass}遇到此類情況如何處理?我知道我們可以將顏色和質(zhì)量轉(zhuǎn)換為函數(shù),然后我們可以使用接口并將該接口傳遞給函數(shù)f。A但是如果和的類型B無(wú)法更改怎么辦?我是否必須定義兩個(gè)具有基本相同實(shí)現(xiàn)的函數(shù)?
1 回答

MMTTMM
TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
在 Go 中,您不需要像 Java、C# 等中那樣的傳統(tǒng)多態(tài)性。大多數(shù)事情都是使用組合和類型嵌入來(lái)完成的。實(shí)現(xiàn)此目的的一種簡(jiǎn)單方法是更改設(shè)計(jì)并將公共字段分組到單獨(dú)的結(jié)構(gòu)中。這只是思維方式不同而已。
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)
}
還有其他方法可以使用這里提到的接口和吸氣劑,但在我看來(lái)這是最簡(jiǎn)單的方法
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)
0/150
提交
取消