You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何获取结构体struct的属性(字段)总数量?

实现方案

Go 语言本身没有内置的结构体字段计数语法,你需要借助标准库 reflect 包获取运行时类型信息来实现该功能,完整可运行代码如下:

package main

import (
	"fmt"
	"reflect"
)

type Client struct {
	name     string // 第1个字段
	lastName string // 第2个字段
	age      uint   // 第3个字段
}

// getLengthAttibutes 返回结构体的字段总个数
func (c Client) getLengthAttibutes() int {
	// 获取结构体的反射类型对象
	t := reflect.TypeOf(c)
	// 兼容指针类型接收器的场景,后续如果把接收器改成*Client不需要重写逻辑
	if t.Kind() == reflect.Ptr {
		t = t.Elem()
	}
	// 仅对结构体类型返回字段数,非结构体返回0避免panic
	if t.Kind() != reflect.Struct {
		return 0
	}
	return t.NumField()
}

func main() {
	client := Client{name: "Facundo", lastName: "Veronelli", age: 23}
	fmt.Println(client.getLengthAttibutes()) // 输出结果为 3
}

注意事项

  • NumField() 统计的是当前结构体层级的显式定义字段,嵌套的匿名嵌入结构体本身会被算作1个字段,嵌入结构体内部的字段不会被统计,如果你需要递归统计所有层级的字段,可以自行加递归遍历逻辑
  • 不要直接对非结构体类型调用 NumField() 方法,会触发运行时panic,上述代码已经加了类型判断兼容异常场景
  • 如果需要只统计公开字段(首字母大写的字段),可以遍历所有字段判断Field(i).IsExported()的返回值再计数

内容的提问来源于stack exchange,提问作者Facundo Veronelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:54:08