Fungsi Menukar Struktur kepada Peta di Golang
Soalan:
Bagaimana boleh Saya cekap menukar struct kepada peta di Golang, menggunakan tag JSON sebagai kunci di mana mungkin?
Jawapan:
Perpustakaan Pihak Ketiga:
Pakej arahan oleh Fatih menyediakan penyelesaian yang mudah dan komprehensif untuk ini tugasan:
func Map(object interface{}) map[string]interface{}
Penggunaan:
package main import ( "fmt" "github.com/fatih/structs" ) type Server struct { Name string `json:"name"` ID int32 `json:"id"` Enabled bool `json:"enabled"` } func main() { s := &Server{ Name: "gopher", ID: 123456, Enabled: true, } m := structs.Map(s) fmt.Println(m) // Output: {"name":"gopher", "id":123456, "enabled":true} }
Ciri:
Pelaksanaan Tersuai:
Jika pelaksanaan tersuai diutamakan, renungkan.Struct boleh digunakan :
func ConvertToMap(model interface{}) map[string]interface{} { // Get the reflect type and value of the model modelType := reflect.TypeOf(model) modelValue := reflect.ValueOf(model) if modelValue.Kind() == reflect.Ptr { modelValue = modelValue.Elem() } // Check if the model is a struct if modelType.Kind() != reflect.Struct { return nil } // Create a new map to store the key-value pairs ret := make(map[string]interface{}) // Iterate over the fields of the struct for i := 0; i < modelType.NumField(); i++ { // Get the field and its name field := modelType.Field(i) fieldName := field.Name // Check if the field has a JSON tag jsonTag := field.Tag.Get("json") if jsonTag != "" { fieldName = jsonTag } // Get the value of the field fieldValue := modelValue.Field(i) // Recursively convert nested structs switch fieldValue.Kind() { case reflect.Struct: ret[fieldName] = ConvertToMap(fieldValue.Interface()) default: ret[fieldName] = fieldValue.Interface() } } return ret }
Walau bagaimanapun, ini memerlukan pengekstrakan nama medan dan menukar struct bersarang.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Go Struct kepada Peta Menggunakan Tag JSON dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!