在Go中,接口是行爲的。也就是說,他們描述了什麼確實多於是。你的例子看起來像你正在嘗試在Go中編寫C#,並在接口類前面大量使用I。但是,僅由一種類型實現的接口有點浪費時間。
相反,考慮:
interface Deleteable { // You'd probably be tempted to call this IDeleteable
// Effective go suggests Deleter, but the grammar
// sounds weird
Delete() err
}
現在你可以創建執行批處理功能刪除:
func BatchDelete(victims []Deleteable) {
// Do some cool things for batching, connect to db, start a transaction
for _, victim := range(victims) {
victim.Delete() // Or arrange for this function to be called somehow.
}
}
你很可能得到通過更新創建界面啓動速度更快,序列化等在和存儲您的實際用戶/權限/等在實現這些方法的具體結構。 (注意在Go中,你不必說某個類型實現了一個接口,它會自動發生)。你也不必爲每個方法的單一接口(更新,可序列化),但你可以捆綁他們都到一個界面:
type DBObject interface {
Update()
Serialize() RowType
Delete()
}
type User struct {
Id int
Name string
// ... etc
}
記住,你的模型可以始終用戶對象「中填寫」從API返回,即使User對象的實際表示是更加分散的,例如RDF三元組。
你在這裏不是很清楚你將如何看待API。也就是說,只要習慣了Go如何執行API並使用它。看看包含的IO模塊如何與Reader,Writer以及各種緩衝區一起工作。不要試圖複製Java或C#或任何其他模式,因爲它會讓其他Go程序員感到錯誤。 –
關於向接口添加函數的另一個評論。考慮添加另一個界面。如果你需要將一個對象保存到數據庫中,你可能會有第二個接口這樣做,然後在你的BasicUser結構上實現它。 –