golang reflect反射实例

文章发布于 2023-08-28

在Go语言中,反射(Reflection)是一种牛X的机制,它可以在程序运行时检查变量的类型和值,并在不知道具体类型的情况下操作变量。反射可以让程序能够动态地获取信息、操作对象和进行元编程

注意:使用反射会降低性能,是代码更加复杂化,所以应避免使用反射

反射实例

实例一:利用reflect.TypeOf()reflect.ValueOf() 查看变量数据的类型和值

func main(){
    str := "abcd"
    //类型是string
    v1t := reflect.TypeOf(str)  //string
    //值是abcd
    v1v := reflect.ValueOf(str) //abcd
    fmt.Println(v1t, v1v)
}

实例二:利用反射获取结构体字段信息

package main

import (
    "fmt"
    "reflect"
)

type Person struct {
    Name   string
    Age    int
    Gender string
}

func main() {
    person := Person{
        Name:   "Alice",
        Age:    30,
        Gender: "female",
    }

    // 获取结构体类型
    personType := reflect.TypeOf(person)
    fmt.Println("Type:", personType)

    // 遍历结构体字段
    for i := 0; i < personType.NumField(); i++ {
        field := personType.Field(i)
        fmt.Printf("Field Name: %s, Type: %s\n", field.Name, field.Type)
    }
}

在这个示例中,我们定义了一个 Person 结构体,并使用反射来获取结构体的类型以及遍历其字段信息。reflect.TypeOf 函数返回一个 reflect.Type 类型的值,其中包含了结构体的类型信息。通过 NumFieldField 方法,我们可以遍历结构体的字段并获取其名称和类型。