go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 使用反射获取结构体的成员变量类型

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 使用反射获取结构体的成员变量类型相关的知识,希望对你有一定的参考价值。

对指针变量获取反射类型对象时,通过reflect.Elem()方法,获取指针变量指向的元素类型,即取元素,等效于对指针变量做一个*操作。

package main

import (
	"fmt"
	"reflect"
	"testing"
)

func main() {
	type cat struct{}

	ins := &cat{} // 实例化cat结构体,得到结构体指针类型*cat

	typeOfCat := reflect.TypeOf(ins) // 使用reflect.TypeOf,获取结构体实例的反射类型对象

	// 使用反射类型对象的.Name()方法和.Kind()方法,显示反射类型对象的类型名和种类
	fmt.Printf("name:'%v' kind:'%v' \\n", typeOfCat.Name(), typeOfCat.Kind())

	typeOfCat = typeOfCat.Elem() // 只有新声明变量时才会用到海象运算符,其他情况的赋值使用=。no new variables on left side of :=
	
	// 输出指针变量指向元素的类型名和种类
	fmt.Printf("element name:'%v' element kind:'%v' \\n", typeOfCat.Name(), typeOfCat.Kind())
}

/*
name:'' kind:'ptr'
element name:'cat' element kind:'struct'
*/

指针变量的反射类型对象的类型名是空,而不是*T。

以上是关于go语言学习笔记 — 进阶 — 反射:反射的类型对象(reflect.Type)— 使用反射获取结构体的成员变量类型的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

Go语言的反射机制

Go语言之Go语言反射