Home Backend Development Golang golang map to struct

golang map to struct

May 10, 2023 pm 12:12 PM

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1673
14
PHP Tutorial
1278
29
C# Tutorial
1257
24
Golang vs. Python: Performance and Scalability Golang vs. Python: Performance and Scalability Apr 19, 2025 am 12:18 AM

Golang is better than Python in terms of performance and scalability. 1) Golang's compilation-type characteristics and efficient concurrency model make it perform well in high concurrency scenarios. 2) Python, as an interpreted language, executes slowly, but can optimize performance through tools such as Cython.

Golang and C  : Concurrency vs. Raw Speed Golang and C : Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golang is better than C in concurrency, while C is better than Golang in raw speed. 1) Golang achieves efficient concurrency through goroutine and channel, which is suitable for handling a large number of concurrent tasks. 2)C Through compiler optimization and standard library, it provides high performance close to hardware, suitable for applications that require extreme optimization.

Getting Started with Go: A Beginner's Guide Getting Started with Go: A Beginner's Guide Apr 26, 2025 am 12:21 AM

Goisidealforbeginnersandsuitableforcloudandnetworkservicesduetoitssimplicity,efficiency,andconcurrencyfeatures.1)InstallGofromtheofficialwebsiteandverifywith'goversion'.2)Createandrunyourfirstprogramwith'gorunhello.go'.3)Exploreconcurrencyusinggorout

Golang vs. C  : Performance and Speed Comparison Golang vs. C : Performance and Speed Comparison Apr 21, 2025 am 12:13 AM

Golang is suitable for rapid development and concurrent scenarios, and C is suitable for scenarios where extreme performance and low-level control are required. 1) Golang improves performance through garbage collection and concurrency mechanisms, and is suitable for high-concurrency Web service development. 2) C achieves the ultimate performance through manual memory management and compiler optimization, and is suitable for embedded system development.

Golang vs. Python: Key Differences and Similarities Golang vs. Python: Key Differences and Similarities Apr 17, 2025 am 12:15 AM

Golang and Python each have their own advantages: Golang is suitable for high performance and concurrent programming, while Python is suitable for data science and web development. Golang is known for its concurrency model and efficient performance, while Python is known for its concise syntax and rich library ecosystem.

Golang and C  : The Trade-offs in Performance Golang and C : The Trade-offs in Performance Apr 17, 2025 am 12:18 AM

The performance differences between Golang and C are mainly reflected in memory management, compilation optimization and runtime efficiency. 1) Golang's garbage collection mechanism is convenient but may affect performance, 2) C's manual memory management and compiler optimization are more efficient in recursive computing.

The Performance Race: Golang vs. C The Performance Race: Golang vs. C Apr 16, 2025 am 12:07 AM

Golang and C each have their own advantages in performance competitions: 1) Golang is suitable for high concurrency and rapid development, and 2) C provides higher performance and fine-grained control. The selection should be based on project requirements and team technology stack.

Golang vs. Python: The Pros and Cons Golang vs. Python: The Pros and Cons Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

See all articles