go语言---reflect
go语言---reflect
https://blog.csdn.net/cyk2396/article/details/78902953
一.reflect的使用:
import (
"fmt"
"reflect"
)
type Student struct {
Name string
Age int
}
func main() {
var x int = 1
student := Student{Name: "zs", Age: 26}
//1.reflect.TypeOf() 返回值Type类型
fmt.Println("x type: ", reflect.TypeOf(x))
fmt.Println("student type: ", reflect.TypeOf(student))
//2.reflect.ValueOf() 返回值Value类型
fmt.Println("x value: ", reflect.ValueOf(x))
fmt.Println("student value: ", reflect.ValueOf(student))
//3.value.Kind() 返回值Kind类型 注意与Type的不同
fmt.Println("x kind: ", reflect.ValueOf(x).Kind())
fmt.Println("student kind: ", reflect.ValueOf(student).Kind())
//4.修改反射对象,修改反射对象的前提条件是其值是可设置的
var a int = 10
v := reflect.ValueOf(&a)
e := v.Elem()
e.SetInt(15)
fmt.Println(e.CanSet()) //根据CanSet()返回值可确定是否可以设置
fmt.Println(a) // 根据结果我们可知 a=15
//5.遍历结构体字段内容
s := reflect.ValueOf(&student).Elem()
studentType := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Printf("%d %s %s = %v\n", i, studentType.Field(i).Name, f.Type(), f.Interface())
}
}
输出结果:
x type: int
student type: main.Student
x value: 1
student value: {zs 26}
x kind: int
student kind: struct
true
15
0 Name string = zs
1 Age int = 26
go语言---reflect的更多相关文章
- Golang reflect 反射
反射的规则如下: 从接口值到反射对象的反射 从反射对象到接口值的反射 为了修改反射对象,其值必须可设置 -------------------------------------------- ...
- 10. Go 语言反射
Go 语言反射 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息. 支持反射的语言可以在 ...
- Go语言反射reflect
目录 通过反射获取类型信息 理解反射的类型(Type)与种类(Kind) reflect.Elem() - 通过反射获取指针指向的元素类型 通过反射获取结构体的成员类型 通过反射获取值信息 使用反射值 ...
- go语言之行--接口(interface)、反射(reflect)详解
一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...
- Go语言反射(reflect)及应用
Go语言反射(reflect)及应用 基本原理及应用场景 在编译时不知道类型的情况下,可更新变量.在运行时查看值.调用方法以及直接对它们的布局进行操作,这种机制被称为反射. 具体的应用场景大概如下: ...
- go语言中的反射reflect
package main; import ( "fmt" "reflect" ) //反射refection //反射使用TypeOf和ValueOf函数从接口 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- GO_09:GO语言基础之reflect反射
反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反 ...
- GO语言基础之reflect反射
反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反 ...
随机推荐
- Go:面向"对象"
一.封装 封装的实现步骤: 将结构体.字段的首字母小写(不能被导出): 给结构体所在的包提供一个工厂模式的函数,首字母大写.类似一个构造函数: 提供一个首字母大写的方法,由于获取结构体属性的值. 二. ...
- SAX解析XML-例子
1.要解析的xml <?xml version="1.0" encoding="UTF-8"?> <employees> <emp ...
- Volume 1. Big Number(uva)
如用到bign类参见大整数加减乘除模板 424 - Integer Inquiry #include <iostream> #include <string> #include ...
- 集训第六周 古典概型 期望 C题
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=30728 一个立体方块,每个单位方块都是关闭状态,每次任两个点,以这两点为对角 ...
- I - DFS(依然是漫水填充)
Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...
- 下载Spring4.1.x源码并用IntelliJ IDEA打开-----
下载Spring4.1.x源码并用IntelliJ IDEA打开-------https://blog.csdn.net/boling_cavalry/article/details/79426075 ...
- 测试各种低价VPS
1) dream.jp 540多的日元一个VPS,是全日本最低的VPS,但是用了以后发现最大问题是受限很多,不好用,如果你打算用作建ss或者其它***功能,对不起,请找其它VPS了 在日本dream. ...
- C++对拍数据生成
#include<map> #include<ctime> #include<queue> #include<cmath> #include<cs ...
- Linux下汇编语言学习笔记32 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- 找宝箱 (bfs)
Problem Description 作为一个强迫症患者,小 Y 在走游戏里的迷宫时一定要把所有的宝箱收集齐才肯罢休.现在给你一个 N *M 的迷宫,里面有障碍.空地和宝箱,小 Y 在某个起始点,每 ...