章节

16.1 类型判断

本篇学习 reflect.TypeOf 和 Kind 的区别,并能在运行时查看值的类型信息。

类型判断

概念说明

反射可以在运行时查看类型和值的信息。
reflect.TypeOf 返回具体类型,Kind 返回类型所属的大类。

例如自定义类型 UserIDTypemain.UserID,但它的 Kind 可能是 int
理解这点对反射判断非常重要。

语法/规则

  1. 使用 reflect.TypeOf(value) 获取运行时类型。
  2. 使用 typ.Kind() 获取类型大类。
  3. Type 更具体,Kind 更抽象。
  4. 空接口值为 nil 时,reflect.TypeOf(nil) 返回 nil
  5. 反射常用于框架、序列化、ORM 等通用逻辑中。

Type 与 Kind 示例

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

import (
	"fmt"
	"reflect"
)

type UserID int

func main() {
	var id UserID = 100
	typ := reflect.TypeOf(id) // 获取运行时具体类型

	fmt.Println(typ.Name()) // 类型名:UserID
	fmt.Println(typ.Kind()) // 底层种类:int
}

输出结果:

1
2
UserID
int

常见错误

  1. TypeKind 混为一谈,导致判断自定义类型时出错。
  2. nil 直接调用 reflect.TypeOf(nil).Kind(),会因为空指针 panic。
  3. 明明可以用普通类型断言解决,却使用反射让代码更难读。
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字