Home > Backend Development > Golang > golang reflection setting variables

golang reflection setting variables

WBOY
Release: 2023-05-09 19:14:36
Original
570 people have browsed it

Preface

In development, we often need to perform reflection operations on structures, variables, etc. Using reflection can directly operate variables, types and other related information, which makes our code more abstract and flexible, making the program The logic is clearer and simpler. Among them, golang provides the reflection-related package reflect. This article will focus on the reflect package to describe how to use reflection to set variables.

Basics

Before we dive into how to set variables using reflection, we need to understand some basics.

  • Type: The type of the variable. Use the reflect.TypeOf() method to get the type of the variable.
  • Value: It can be understood as the value of a variable, and the value of the variable can be obtained using the reflect.ValueOf() method.
  • reflect.Value The following properties exist:

    • Kind(): Get the type of value, the return value is reflect.Kind Type.
    • Int()Float()Bool()String()Bytes (), Interface(), etc.: Get the corresponding value.
    • Set(): Set the value, but you need to ensure that the current value is of a settable type. For details, please refer to reflect.Value.Set().

Reflection setting value

Reflection setting variables are mainly divided into the following steps:

  1. Get the of the variable reflect.Value value;
  2. Determine whether the value is a settable value, which can be modified by the reflect.Value.Set() method;
  3. Set value.

Take the sample code as an example:

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{
        Name: "John",
        Age:  25,
    }

    v := reflect.ValueOf(p)

    if v.Kind() == reflect.Struct {
        name := v.FieldByName("Name")
        age := v.FieldByName("Age")

        if name.IsValid() && name.CanSet() {
            name.SetString("Tom")
        }

        if age.IsValid() && age.CanSet() {
            age.SetInt(30)
        }
    }

    fmt.Println(p)
}
Copy after login

Among them:

  • ##v The variable is reflect.Value Type, get the Value of the variable p;
  • Get the attributes (fields) of the variable through
  • v.FieldByName() The reflect.Value value of Name and Age;
  • determines whether
  • name and age are settable The value must satisfy the validity and settability. For details, please refer to reflect.Value.CanSet();
  • The variable can be completed through the setting method
  • p Modification of Name and Age properties.
It should be noted that before setting the value, you need to determine whether the variable can be set, otherwise a

panic exception will be thrown.

Summary

Golang Reflection setting variables Compared with other languages, the operation of Golang reflection setting variables is very intuitive and simple, and the supported types are also very rich, which makes us more efficient in development. Flexible and convenient. However, it should be noted that when using reflection, you need to pay attention to both performance and maintainability. It should not be overused, otherwise it will lead to problems such as reduced program readability and performance.

The above is the detailed content of golang reflection setting variables. 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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template