首頁 > 後端開發 > Golang > Go中如何實作動態型別回傳?

Go中如何實作動態型別回傳?

Patricia Arquette
發布: 2024-12-02 05:33:14
原創
701 人瀏覽過

How to Achieve Dynamic Type Return in Go?

Golang 中如何處理動態型別回傳?

場景:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板