go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 结构体标签(struct tag)是结构体字段的额外信息标签

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 结构体标签(struct tag)是结构体字段的额外信息标签相关的知识,希望对你有一定的参考价值。

  • 格式

结构体标签写在结构体字段的后边。结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号扩起来,键值对之间用一个空格分隔。

`key1:"value1" key2:"value2"`
  • 从结构体标签中取值
func(tag structTag) Get(key string) string:
func(tag structTag) Lookup(key string)(value string, ok bool):
  • 结构体标签格式错误
package main 

import (
    "fmt"
    "reflect"
)

func main() {
    type cat struct {
        Name string
        Type int `json:"type" id:"110"`
    }
    
    // 获取结构体实例的反射类型对象
    typeOfCat := reflect.TypeOf(cat{})  
    
    // 获取反射类型对象的"Type"字符串的结构体信息
    if catType, ok := typeOfCat.FileByName("Type"); ok {
        // 使用.Tag.Get获取结构体标签的json键对应值
        fmt.Println(catType.Tag.Get("json"))
    }
}

如果结构体标签不按格式定义,如下:

Type int `json: "type" id:"110"`

则不能获得对应的结构体标签值。

以上是关于go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 结构体标签(struct tag)是结构体字段的额外信息标签的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 什么是反射?

go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)

go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 结构体标签(struct tag)是结构体字段的额外信息标签

go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 反射类型对象的类型名(Type)和种类(Kind)

Go语言的反射机制

Go语言之Go语言反射