章节

16.2 反射获取值

本篇学习 reflect.ValueOf 获取运行时值,并能把反射值转换回普通值。

反射获取值

概念说明

reflect.ValueOf 可以把普通值包装成反射值。
反射值上可以查看类型、种类,也可以通过 Interface 转回普通接口值。

如果已经知道目标类型,可以再配合类型断言取回具体类型。

语法/规则

  1. 使用 reflect.ValueOf(value) 获取反射值。
  2. 使用 value.Kind() 查看值的大类。
  3. 使用 value.Interface() 转回 any
  4. 对不同 Kind 有专门方法,例如 Int()String()
  5. 使用专门方法前要先确认 Kind,否则可能 panic。

获取值示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import (
	"fmt"
	"reflect"
)

func main() {
	value := reflect.ValueOf("golang") // 把普通值包装成反射值

	fmt.Println(value.Kind())
	fmt.Println(value.String())

	text := value.Interface().(string) // 先转回 any,再断言成 string
	fmt.Println(text)
}

输出结果:

1
2
3
string
golang
golang

常见错误

  1. string 类型反射值调用 Int(),会触发 panic。
  2. 以为 Interface() 会直接返回具体类型变量,实际返回的是 any
  3. 反射值为零值或无效值时仍继续取值,导致运行时 panic。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字