美文网首页
golang反射示例

golang反射示例

作者: 哆啦在这A梦在哪 | 来源:发表于2020-08-12 14:31 被阅读0次
package main

import (
    "fmt"
    reflect "reflect"
)

type User struct {
    Id   int
    Name string
    Age  int
}

func (u User) ReflectCallFunc() {
    fmt.Println("Allen.Wu ReflectCallFunc")
}

func main() {
    user := User{1, "Allen.Wu", 25}
    DoFiledAndMethod(user)
}
func DoFiledAndMethod(input interface{}) {

    getType := reflect.TypeOf(input)
    fmt.Println("get Type is :", getType.Name())

    getValue := reflect.ValueOf(input)
    fmt.Println("get all Fields is:", getValue)

    // 获取方法字段
    // 1. 先获取interface的reflect.Type,然后通过NumField进行遍历
    // 2. 再通过reflect.Type的Field获取其Field
    // 3. 最后通过Field的Interface()得到对应的value
    for i := 0; i < getType.NumField(); i++ {
        field := getType.Field(i)
        value := getValue.Field(i).Interface()
        fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value)
    }

    // 获取方法
    // 1. 先获取interface的reflect.Type,然后通过.NumMethod进行遍历
    for i := 0; i < getType.NumMethod(); i++ {
        m := getType.Method(i)
        fmt.Printf("%s: %v\n", m.Name, m.Type)
    }
}

输出:

get Type is : User
get all Fields is: {1 Allen.Wu 25}
Id: int = 1
Name: string = Allen.Wu
Age: int = 25
ReflectCallFunc: func(main.User)

相关文章

  • golang反射示例

    输出:

  • Golang的反射reflect深入理解和示例

    [TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算...

  • 关于反射

    Golang的反射reflect深入理解和示例 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够...

  • Golang 反射实现依赖注入

    Golang 反射实现依赖注入 Coding/Golang #Golang #Golang/reflect 依赖注...

  • golang反射用法举例(注册插件)

    有关golang反射的内容,网上有大量讲述,请自行google——"golang反射三法则" 下面主要反射在实际中...

  • 反射 reflection golang

    原文链接:反射reflection-GOLANG

  • golang代码分析

    1.golang并行示例(1)

  • Golang 反射

    基本了解 在Go语言中,大多数时候值/类型/函数非常直接,要的话,定义一个。你想要个Struct 你想要一个值,你...

  • golang 反射

    反射机制是指在程序运行的时候动态地获取对象的属性后者调用对象方法的功能。golang 支持反射,原生的 json ...

  • golang反射

    反射让我们能在运行期间弹指对象的类型信息和内存结构,甚至还能访问隐藏属性。 类型 获取对象类型t.Name是真实类...

网友评论

      本文标题:golang反射示例

      本文链接:https://www.haomeiwen.com/subject/wtapdktx.html