golang map to struct

PHPz
Release: 2023-05-10 12:12:36
Original
1391 people have browsed it

In the Go language, map is a powerful data structure that can be used to quickly solve some complex problems. But on some occasions, we may need to convert the map into a struct type for easy operation and use. This article will introduce how to convert golang map into struct.

1. Prerequisite knowledge

Before learning to convert golang map to struct, we need to master the following basic knowledge:

  1. struct

struct is a composite data type that can be composed of multiple fields, each field has its own type and value. In the Go language, you can use struct to represent a custom data type, which can be used to represent any complex data structure, such as student information, product information, etc.

Example:

type Student struct {

Name string Age int ClassNum int
Copy after login
Copy after login

}

  1. map

map is a key Value pair data structure, which is used to store unordered Key-Value (key-value pair) data. In the Go language, map initialization is created using the make() function, or literals can also be used.

Example:

//Use the make() function to create a map
var m1 map[string]int
m1 = make(map[string]int)

//Use literals to create map
m2 := map[string]int{

"A": 1, "B": 2, "C": 3,
Copy after login

}

  1. Reflection

Reflection is One of golang's advanced features, it allows the program to dynamically check variable types and values at runtime, as well as modify the values and types of variables. In golang, the reflect package provides the functions and types required for reflection operations.

Example:

package main

import (

"fmt" "reflect"
Copy after login

)

func main() {

var x float64 = 3.14 fmt.Println("Type:", reflect.TypeOf(x)) //输出变量类型 fmt.Println("Value:", reflect.ValueOf(x)) //输出变量值
Copy after login

}

2. Method of converting map to struct

In golang, you can use reflection to convert map type to struct type. The specific steps are as follows:

  1. Define struct

First, we need to define a struct type to store data converted from the map type.

Example:

type Student struct {

Name string Age int ClassNum int
Copy after login
Copy after login

}

  1. define map

Next, we define A map type variable and initialize some key-value pair data in it.

Example:

m := map[string]interface{}{

"Name": "小明", "Age": 18, "ClassNum": 3,
Copy after login

}

  1. Define struct variable

We define a variable of struct type, and its type is consistent with the defined struct type.

Example:

var s Student

  1. Use reflection for conversion

Finally, we convert the map type into struct through reflection Type, the specific implementation is as follows:

func MapToStruct(m map[string]interface{}, s interface{}) error {

structValue := reflect.ValueOf(s).Elem() for k, v := range m { structFieldValue := structValue.FieldByName(k) if !structFieldValue.IsValid() { continue } if !structFieldValue.CanSet() { return fmt.Errorf("Cannot set %s field value", k) } val := reflect.ValueOf(v) if structFieldValue.Type() != val.Type() { return fmt.Errorf("Provided value %+v type %s didn't match obj field type %s", v, val.Type(), structFieldValue.Type()) } structFieldValue.Set(val) } return nil
Copy after login

}

Here by passing in map The two parameters [string]interface{} and interface{} realize the conversion of map type into struct type. First, get the reflect.Value of s, and then traverse the elements in map[k: v]. If there is this key in the map, take out the corresponding field in reflect.Value through FieldName, then get the reflect.Value of v and After comparing the type, set it into s.

3. Example

You can test this function through the following example code:

func main() {

m := map[string]interface{}{ "Name": "小明", "Age": 18, "ClassNum": 3, } var s Student err := MapToStruct(m, &s) if err != nil { fmt.Println(err) } else { fmt.Printf("%#v
Copy after login

", s)

}
Copy after login

}

Through the above example code, we can convert a map type variable into a struct type variable to facilitate subsequent operations and use.

Summary

The method of converting golang map to struct is to use the characteristics of reflection for conversion. This article introduces the implementation and use of this method in detail through sample code. Although reflection is one of the advanced features of the Go language, in some cases It is quite necessary to use it.

The above is the detailed content of golang map to struct. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!