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.
Ya, adalah mungkin untuk mengembalikan jenis struct secara dinamik dalam Go, tetapi ia memerlukan pertimbangan yang teliti antara muka{} dan penegasan jenis.
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{}
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 }
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"]))
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.
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!