Rumah > pembangunan bahagian belakang > Golang > Bolehkah Go Functions Mengembalikan Jenis Struktur Berbeza Secara Dinamik Menggunakan `antara muka{}`?

Bolehkah Go Functions Mengembalikan Jenis Struktur Berbeza Secara Dinamik Menggunakan `antara muka{}`?

Linda Hamilton
Lepaskan: 2024-12-28 22:51:12
asal
562 orang telah melayarinya

Can Go Functions Dynamically Return Different Struct Types Using `interface{}`?

Bagaimana untuk Mengembalikan Jenis Struktur secara Dinamik dalam Go?

Dalam aplikasi Revel anda, anda telah mengalami lebihan kod yang disebabkan oleh fungsi berbeza yang mengembalikan jenis data yang serupa. Daripada mencipta berbilang fungsi pembantu untuk setiap model, anda membayangkan penyelesaian dinamik yang mengembalikan jenis{} antara muka. Soalan ini menyelidiki kemungkinan pendekatan ini.

Adakah Mungkin?

Ya, adalah mungkin untuk mengembalikan jenis struct secara dinamik dalam Go, tetapi ia memerlukan pertimbangan yang teliti antara muka{} dan penegasan jenis.

Tandatangan Fungsi

Sebaliknya []*antara muka{}, anda harus mengisytiharkan fungsi anda untuk mengembalikan antara muka{}. Ini membenarkan fungsi untuk mengembalikan sebarang jenis, termasuk struct.

func (c Helper) ReturnModels(modelName string) interface{}
Salin selepas log masuk

Contoh

Pertimbangkan contoh berikut:

type Post struct {
    Author  string
    Content string
}

type Brand struct {
    Name string
}

var database map[string]interface{} // Simulates a dynamic data source

func ReturnModels(modelName string) interface{} {
    return database[modelName] // Retrieve data from hypothetical database
}
Salin selepas log masuk

Penggunaan

Anda boleh menggunakan suis jenis atau penegasan jenis untuk mengembalikan nilai pulangan kepada asalnya taip.

type switcher func(interface{}) interface{}
var result switcher

switch modelName := database["myModel"].(type) {
    case Brand:
        result = func(v interface{}) interface{} {
            return v.(Brand)
        }
    case Post:
        result = func(v interface{}) interface{} {
            return v.(Post)
        }
}
fmt.Println(result(database["myModel"]))
Salin selepas log masuk

Dalam contoh ini, pernyataan suis menilai jenis data yang diambil daripada pangkalan data. Berdasarkan jenis, fungsi hasil diperuntukkan kepada fungsi pemutus tertentu, yang kemudiannya digunakan.

Kesimpulan

Jenis struct yang mengembalikan secara dinamik dalam Go menggunakan antara muka{} boleh dicapai tetapi memerlukan pengendalian yang teliti . Penegasan jenis boleh digunakan untuk memastikan jenis yang betul dihantar. Rujuk kepada contoh dan dokumentasi yang dipautkan untuk panduan lanjut.

Atas ialah kandungan terperinci Bolehkah Go Functions Mengembalikan Jenis Struktur Berbeza Secara Dinamik Menggunakan `antara muka{}`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan