⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go reflect包:运行时反射与元编程

掌握Go reflect包,在运行时检查类型、调用方法和修改值 · 难度:入门 · +15XP

Go reflect包核心概念

reflect包允许程序在运行时检查任意对象的类型和值,甚至修改值或调用方法。它主要用于序列化库、ORM、测试工具等场景。

1. 两个核心类型

通过reflect.TypeOf()reflect.ValueOf()获取。

2. 类型检查

var x float64 = 3.4
v := reflect.ValueOf(x)
fmt.Println("Type:", v.Type())   // float64
fmt.Println("Kind:", v.Kind())   // float64

KindType更底层,例如type MyInt int的Type是MyInt,Kind是int

3. 修改值(需要可寻址)

要修改值,必须传入指针:reflect.ValueOf(&x).Elem(),然后使用SetXxx方法。

4. 调用方法

method := v.MethodByName("MethodName")
result := method.Call([]reflect.Value{arg})

5. 常用方法表格

方法作用
NumField()获取结构体字段数量
Field(i)获取第i个字段
NumMethod()获取方法数量
Call(args)调用方法

练习提示

在starter_code中,请使用反射打印Person结构体的所有字段名和值,然后调用SayHello方法。提示:使用reflect.TypeOf(p).NumField()遍历字段。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0