golang Golang通过反射获取结构体的标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Golang通过反射获取结构体的标签相关的知识,希望对你有一定的参考价值。

package main

import (
    "fmt"
    "reflect"
)

type resume struct {
    Name string `json:"name" doc:"我的名字"`
}

func findDoc(stru interface{}) map[string]string {
    t := reflect.TypeOf(stru).Elem()
    doc := make(map[string]string)

    for i := 0; i < t.NumField(); i++ {
        doc[t.Field(i).Tag.Get("json")] = t.Field(i).Tag.Get("doc")
    }

    return doc

}

func main() {
    var stru resume
    doc := findDoc(&stru)
    fmt.Printf("name字段为:%s\n", doc["name"])
}

golang之反射

反射基本介绍

  1)反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind)

  2)如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段,方法)

  3)通过反射,可以修改变量的值,可以调用关联的方法

  4)使用反射,需要 import ("reflect")

反射重要的函数和概念

  1)reflect.TypeOf(变量名),获取变量的类型,返回reflect.Type类型

  2)reflect.ValueOf(变量名),获取变量的值,返回reflect.Value类型,reflect.Value是一个结构体类型。通过reflect.Value,可以获取到关于该变量的很多信息

  3)变量、interface{}和reflect.Value是可以相互转换的,这点在实际开发中,会经常使用到。

    interface{}  ——>  reflect.Value:

      rVal := reflect.ValueOf(b)

    reflect.Value  ——>  interface{}:

      iVal := rVal.Interface()

    interface{}  ——>  原来的变量(类型断言):

      v := iVal.(Stu)

以上是关于golang Golang通过反射获取结构体的标签的主要内容,如果未能解决你的问题,请参考以下文章

golang之反射

golang 使用reflect反射结构体

Golang basic_leaming反射

Golang basic_leaming反射

golang-利用反射给结构体赋值

(四十五)golang--反射