Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencapai Pulangan Jenis Dinamik dalam Go?

Bagaimana untuk Mencapai Pulangan Jenis Dinamik dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 05:33:14692semak imbas

How to Achieve Dynamic Type Return in Go?

Bagaimana untuk Mengendalikan Pemulangan Jenis Dinamik di Golang?

Senario:

Dalam pembangunan Golang Revel, kod berulang timbul disebabkan kepada jenis pulangan data yang serupa yang melibatkan struct jenis. Pertimbangkan fungsi berikut:

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

}

Dalam kedua-dua kes, jenis pemulangan adalah sama (*[]struct). Untuk mengelakkan pertindihan, pendekatan jenis pulangan dinamik dicadangkan:

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}

Soalan:

  • Adakah pengembalian jenis dinamik mungkin?
  • Bagaimana untuk melaksanakan ia?

Jawapan:

Ya, pulangan jenis dinamik boleh dicapai. Fungsi harus mengembalikan antara muka{} dan bukannya []*antara muka{}. Begini cara ia boleh dilaksanakan:

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}

Untuk menggunakan nilai yang dikembalikan, suis taip atau penegasan jenis digunakan untuk menghantarnya kembali kepada jenis asalnya:

Contoh:

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}

Dengan melaksanakan pendekatan ini, pertindihan kod boleh dikurangkan dengan ketara dengan menggunakan satu pembantu fungsi untuk mendapatkan data.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pulangan Jenis Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn