Go-反射

反射机制主要由reflect包提供支持 每个变量都有一个静态类型和一个动态类型,静态类型是在编译时确定的,而动态类型是在运行时确定的。

反射机制的原理是通过在运行时动态地获取类型信息和操作对象,实现对对象的检查、操作和修改

在Go语言中,反射是一种强大的机制,可以在运行时动态地获取和修改变量的值、类型和结构,也可以动态绑定函数方法等。

PS:
反射机制的主要应用场景是在框架、库和工具中,例如JSON解析、ORM框架、RPC框架等。反射机制可以让代码更加灵活和通用,但是也会带来一定的性能损失,因此在实际开发中需要权衡使用反射机制的利弊。

Go语言中的反射机制主要由reflect包提供支持,该包提供了Type和Value两个类型,分别表示类型信息和值信息。通过Type和Value类型,可以获取对象的类型信息、值信息、字段信息、方法信息等。

 

Demo

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    user := User{Name: "Alice", Age: 18}

    t := reflect.TypeOf(user)
    fmt.Printf("%v\n", t) // main.User

    for i := 0; i < t.NumField(); i++ {
        field := t.Field(i)
        fmt.Printf("%s: %s\n", field.Name, field.Tag.Get("json"))
    }
    /*
        Name: name
        Age: age

    */
}

 

常用方法

reflect.TypeOf:获取变量的类型的反射对象。

reflect.ValueOf:获取变量的值的反射对象。

reflect.New:创建一个指向类型的新指针的反射对象。

reflect.Zero:获取类型的零值的反射对象。

reflect.Indirect:获取指针指向的值的反射对象。

reflect.PtrTo:获取类型的指针类型的反射对象。

reflect.TypeOf:获取类型的反射对象。

reflect.ValueOf:获取值的反射对象。

reflect.MakeFunc:创建一个新的函数值的反射对象。

reflect.MethodByName:获取类型的方法的反射对象。

reflect.Value.MethodByName:获取值的方法的反射对象。

reflect.Value.Method:获取值的方法的反射对象。

reflect.Value.Call:调用值的方法。

reflect.Value.FieldByName:获取值的字段的反射对象。

reflect.Value.Field:获取值的字段的反射对象。

reflect.Value.Set:设置值的反射对象的值。

reflect.Value.SetString:设置字符串类型值的反射对象的值。

reflect.Value.SetInt:设置整数类型值的反射对象的值。

reflect.Value.SetFloat:设置浮点数类型值的反射对象的值。

reflect.Value.SetPointer:设置指针类型值的反射对象的值。

 

posted @ 2019-07-11 02:30  GJH-  阅读(539)  评论(0)    收藏  举报