我有一個其他兩個對象實現(xiàn)的結(jié)構(gòu)。在這種情況下,typeA 和 B 回購。有一些初始化代碼,這里用省略號表示。初始化代碼在兩個構(gòu)造函數(shù)之間完全重復(fù),雖然我只有兩個dbRepo,但這沒什么大不了的,但是當(dāng)我創(chuàng)建更多時,我會更加擔(dān)心這種不好的做法。有沒有辦法用接口來概括這一點?type dbRepo struct { foo string bar string}type typeARepo dbRepotype typeBRepo dbRepofunc newTypeARepo(foo, bar string) { ...}func newTypeBRepo(foo, bar string) { ...}
3 回答

肥皂起泡泡
TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
我個人在 Go 中觀察到的實踐(這也是有效 Go 或 Go 入門教程中推薦的)只是定義一個NewdbRepo函數(shù)并將其用于所有實例化。它的實現(xiàn)看起來像;
func NewdbRepo(f, b string) *dbRepo {
return &dbRepo{ foo:f, bar:b}
}
您實際上無法像在大多數(shù)類似 C 的語言中那樣定義構(gòu)造函數(shù),因此您只需要提供一個包范圍的方法來為您進(jìn)行構(gòu)造。此外,如果您不使用復(fù)合文字(我在 NewdbRepo 實現(xiàn)中使用的初始化樣式),那么您可能會發(fā)現(xiàn)僅憑這一點就足以滿足您的需要。

手掌心
TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
您可以使用初始化代碼編寫一個函數(shù):
func newDbRepo(foo, bar string) dbRepo {
// ...
}
然后你可以將它與類型轉(zhuǎn)換一起使用:
a := typeARepo(newDbRepo("foo", "bar"))
b := typeBRepo(newDbRepo("foo", "bar"))
- 3 回答
- 0 關(guān)注
- 270 瀏覽
添加回答
舉報
0/150
提交
取消