場景:
Golang Revel 開發中,由於重複程式碼而產生涉及結構類型的類似資料回傳類型。考慮以下函數:
func (c Helper) Brands() []*models.Brand { // Query rethinkdb and populate the Brand model var brands []*models.Brand rows.All(&brands) return brands } func (c Helper) BlogPosts() []*models.Post { // Query rethinkdb and populate the Post model var posts []*models.Post rows.All(&posts) return posts }
在這兩種情況下,傳回類型是相同的(*[]struct)。為了避免重複,建議採用動態回傳型法:
func (c Helper) ReturnModels(modelName string) []*interface{} { // Query rethinkdb with modelName and return []*interface{} }
問題:
答案:
是的,動態型別回傳是可以實現的。函式應該回傳interface{}而不是[]*interface{}。以下是它的實作方式:
func (c Helper) ReturnModels(modelName string) interface{} { // Query rethinkdb with modelName and return interface{} }
為了利用傳回的值,可以使用型別開關或型別斷言將其轉換回原始型別:
範例:
if brands, ok := ReturnModels("brands").([]Brand); ok { // ... } if posts, ok := ReturnModels("posts").([]Post); ok { // ... }
透過實現這種方法,可以透過使用單一資料輔助函數來顯著減少程式碼重複檢索。
以上是Go中如何實作動態型別回傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!