Pemulangan Jenis Struktur Dinamik di Golang
Dalam projek Revel, selalunya terdapat lebihan yang ketara dalam jenis pulangan merentas model yang berbeza.
Pertimbangkan dua fungsi ini:
func (c Helper) Brands() []*models.Brand { // Select from rethinkdb and populate models.Brand var brands []*models.Brand rows.All(&brands) return brands } func (c Helper) BlogPosts() []*models.Post { // Select from rethinkdb and populate models.Post var posts []*models.Post rows.All(&posts) return posts }
Kedua-dua fungsi kembalikan jenis data yang sama (penunjuk kepada kepingan struct). Untuk mengurangkan lebihan, satu idea ialah mencipta fungsi pulangan generik yang mengembalikan antara muka{} yang mampu mewakili jenis yang berbeza.
func (c Helper) ReturnModels(modelName string) interface{} { // Select from rethinkdb based on modelName and return interface{} }
Dengan pendekatan ini, hanya akan ada satu fungsi pulangan, memudahkan kod dan mengurangkan lebihan.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa antara muka yang dikembalikan{} disertakan dengan kaveat:
Contoh kod berikut menunjukkan pendekatan ini:
package main import "fmt" type Post struct { Author string Content string } type Brand struct { Name string } var database map[string]interface{} func init() { database = make(map[string]interface{}) brands := []Brand{ {Name: "Gucci"}, {Name: "LV"}, } database["brands"] = brands posts := []Post{ {Author: "J.K.R", Content: "Whatever"}, } database["posts"] = posts } func main() { fmt.Println("List of Brands:") if brands, ok := ReturnModels("brands").([]Brand); ok { fmt.Printf("%v", brands) } fmt.Println("\nList of Posts:") if posts, ok := ReturnModels("posts").([]Post); ok { fmt.Printf("%v", posts) } } func ReturnModels(modelName string) interface{} { return database[modelName] }
Atas ialah kandungan terperinci Bagaimanakah Pemulangan Jenis Struktur Dinamik Golang Dapat Meningkatkan Kecekapan Kod Semasa Menguruskan Risiko Keselamatan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!