golang中reflect包的常用方法

2025-07-02 17:50
文章标签 golang reflect 常用 方法

本文主要是介绍golang中reflect包的常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

reflect包方法总结

  p := Person{Name: "小明", Age: 22}
  t := reflect.TypeOf(&p)
  v := reflect.ValueOf(p)

类型 (Type) 方法

方法名描述示例               
Name()获取类型的名称t.Name(javascript)
Kind()获取类型的种类(如 struct, int, string 等)t.Kind()
String()返回类型的完整名称,包括包路径t.String()

值 (Value) 方法

方法名描述示例               
FieldByName()根据字段名称获取字段的值v.FieldByName("Age")
NumField()获取结构体的字段数量v.NumField()
Field()根据索引获取字段的值v.Field(i)
Interface()获取字段的值作为 interface{} 类型v.Field(i).Interface()
String()返回值的字符串表示v.String()
Kind()获取值的种类(与 Type().Kind()php 相同)v.Kind()
Type()获取值的类型信息v.Type()
Elem()返回指针指向的值reflect.ValueOf(&p).Elem()
SetString()设置字符串类型的值nameField.SetString("ChenZH")
MethodByName()根据方法名称获取方法的值ptr.MethodByName("String")
Call()调用方法,传入参数(此处为 nil)method.Call(nil)
IsValid()检查值是否有效method.IsValid()
CanSet()检查字段是否可以设置nameField.CanSet()

代码示例:

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	//Type:类型信息,包括基础类型(如int, string)、复合类型(如数组、切片、结构体)等。
	//Value:实际值,可以是任何类型的值。
	//Kind:更具体的类型分类,比如int, float64, struct等。

	// 获取类型信息
	p := Person{Name: "小明", Age: 22}
	t := reflect.TypeOf(p)
	fmt.Println("Type_name:", t.Name())
	fmt.Println("Type_kind:", t.Kind())
	fmt.Println("Type_string:", t.String())

	// 获取值信息
	v := javascriptreflect.ValueOf(p)
	fmt.Println(v.FieldByName("Age"))
	fmt.Println("Value:", v)
	for i := 0; i < v.NumField(); i++ {
		fmt.Println("Field:", i, "BfOFWLrzhiValue:", v.Field(i).Interface())
	}
	fmt.Println("Value_String", v.String())
	fmt.Println("Value_Kind", v.Kind())
	fmt.Println("Value_Type", v.Type())

	// 修改字段值(得传递指针)
	ptr := reflect.ValueOf(&p).Elem()
	fmt.Println("Ptr_Value:", ptr)
	nameField := ptr.FieldByName("Name")
	if nameField.IsValiBfOFWLrzhid() && nameField.CanSet() {
		nameField.SetString("xiaoming")
	}
	fmt.Println("modified name: ", p.Name)

	// 调用方法
	method := ptr.MethodByName("String")
	if method.IsValid() {
		results := method.Call(nil)
		for _, result := range results {
			fmt.Println("Method result: ", result.String())
		}
	}
}

func (p Person) String() string {
	return fmt.Sprintf("%s is %d year old", p.Name, p.Age)
}

到此这篇关于golang中reflect包的常用方法的文章就介绍到这了,更多相关golang reflect包内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)! 

这篇关于golang中reflect包的常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155280

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令