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. 反 ...
随机推荐
- 网络协议TCP
TCP:传输控制协议 tcp的特点:面向连接(打电话模型),可靠传输 tcp通信的三个步骤: 1.通信双方建立连接 2.收发收据 3.关闭连接 tcp客户端实现流程 """ ...
- LeetCode(59)SPiral Matrix II
题目 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. F ...
- AutoMapper的使用在NET core中的使用记录
关于AutoMapper的用处以及主要便利指出请参考官方文档,本文章仅记录自己使用的过程及代码: 安装 在项目中涉及到的类包括:Account,AccountCondition,AutoMapperC ...
- Python实现图片切割
import os from PIL import Image def splitimage(src, rownum, colnum, dstpath): img = Image.open(src) ...
- Floyd算法实现总结
问题描述 给出图,求任意两点的最短距离 算法思路 定义n+1个矩阵矩阵A,和记录路径的矩阵path 依次求A0~An的值,最后的An即为最短路径矩阵 // int A[8][7][7],path[7] ...
- [K/3Cloud] 使用操作还是服务
现在菜单点击事件既可以挂操作又可以挂服务,那到底是应该挂操作还是服务呢? 有个需求是要求一个动作可以在两个时点被触发 1.单据由下推或选单生成的时候: 2.点击单据界面功能菜单: 这样是不是需要做一个 ...
- Quartz进一步学习与使用
一.再思考 了解Quartz.NET的基本使用方法了.但如果想方便的知道某个作业执行情况,需要暂停,启动等操作行为,这时候就需要个Job管理的界面,如何才能达到我们想到的效果,查看相关Quartz.n ...
- [NOIP2004] 提高组 洛谷P1089 津津的储蓄计划
题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里 ...
- 一练Splay之维修数列第一次
平衡树并不是之前没写过,觉得有必要把平衡树变成考场上能敲的东西,也就是说,考一道诸如“维修数列”这样的送分题,要能拿满分. 维修数列.给定一个数列支持以下操作: 输入的第1 行包含两个数N 和M(M ...
- [bzoj2982]combination_卢卡斯
Combination bzoj-2982 题目大意:求$C_n^m/%10007$. 注释:$1\le n,m\le 2\cdot 10^9$. 想法:裸卢卡斯定理. 先处理出$mod$数之内的阶乘 ...