Go中reflect包可获取数组长度、遍历元素并修改值,但因数组是值类型,修改原数组须传指针;Len()获取长度需先用Kind()校验类型,Index(i)取元素后需Interface()转换类型。
在 Go 中,reflect 包可用于运行时获取数组信息(如长度)、遍历元素、甚至修改值,但需注意:Go 的数组是值类型且长度固定,reflect 操作的是其副本,若要修改原数组,必须传入指针。
使用 reflect.Value.Len() 可获取数组长度。该方法对数组、切片、map、channel 都有效,但对非上述类型会 panic,因此建议先用 Kind() 校验。
示例:
arr := [3]int{10, 20, 30}
v := reflect.ValueOf(arr)
if v.Kind() == reflect.Array {
fmt.Println("长度:", v.Len()) // 输出:3
}
通过 Len() 获取长度后,用 Index(i) 逐个取元素。注意:Index() 返回的是 reflect.Value,需调用 Interface() 转为实际类型才能使用。
常见写法:
reflect.ValueOf(arr)
Elem() 获取底层数组的可寻址 Value示例(只读):
arr := [3]string{"a", "b", "c"}
v := reflect.ValueOf(arr)
for i := 0; i < v.Len(); i++ {
elem := v.Index(i).Interface()
fmt.Printf("索引 %d: %v\n", i, elem) // 输出 a, b, c
}
要真正修改原数组,必须传入指针,并确保该 reflect.Value 是可设置的(CanSet() == true)。通常需满足两个条件:原始值本身可寻址(如变量而非字面量),且反射值由指针解引用而来。
正确做法:
reflect.ValueOf(&arr).Elem() 得到可设置的数组 Valuev.CanSet(),避免 panicIndex(i).Set(x) 修改单个元素,x 必须是同类型且可赋值的 reflect.Value
示例:
arr := [2]int{1, 2}
v := reflect.ValueOf(&arr).Elem() // 注意 .Elem()
if v.CanSet() {
v.Index(0).SetInt(99)
v.Index(1).SetInt(88)
}
fmt.Println(arr) // [99 88]
数组在 Go 中长度属于类型的一部分(如 [3]int 和 [4]int 是不同类型),reflect 无法
改变其长度;若需动态操作,应考虑使用切片([]T)并配合 reflect.MakeSlice 等函数。
其他要点:
reflect.ValueOf([2]int{1,2}))得到的 Value 不可设置len(arr), for i := range arr)
# go
# golang
# 常量
# for
# int
# 指针
# 值类型
# Interface
# 切片
# len
# map
# channel
# kind
# 遍历
# 的是
# 先用
# 而来
# 再用
# 但对
# 而非
# 若要
# 但因
# 不同类型
相关文章:
如何通过老薛主机一键快速建站?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何正确下载安装西数主机建站助手?
建站主机如何选?高性价比方案全解析
如何快速搭建高效服务器建站系统?
宝塔新建站点报错如何解决?
制作旅游网站html,怎样注册旅游网站?
,石家庄四十八中学官网?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在西部数码注册域名并快速搭建网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
小型网站制作HTML,*游戏网站怎么搭建?
如何快速搭建自助建站会员专属系统?
广德云建站网站建设方案与建站流程优化指南
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何高效搭建专业期货交易平台网站?
C++时间戳转换成日期时间的步骤和示例代码
岳西云建站教程与模板下载_一站式快速建站系统操作指南
广州营销型建站服务商推荐:技术优势与SEO优化解析
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星代理平台如何选择最佳方案?
建站主机如何选?性能与价格怎样平衡?
如何在搬瓦工VPS快速搭建网站?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
nginx修改上传文件大小限制的方法
如何高效生成建站之星成品网站源码?
宁波免费建站如何选择可靠模板与平台?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
黑客入侵网站服务器的常见手法有哪些?
公众号网站制作网页,微信公众号怎么制作?
音乐网站服务器如何优化API响应速度?
广平建站公司哪家专业可靠?如何选择?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
建站168自助建站系统:快速模板定制与SEO优化指南
如何快速生成ASP一键建站模板并优化安全性?
如何通过cPanel快速搭建网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
做企业网站制作流程,企业网站制作基本流程有哪些?
制作网站公司那家好,网络公司是做什么的?
山东云建站价格为何差异显著?
高性价比服务器租赁——企业级配置与24小时运维服务
如何通过云梦建站系统实现SEO快速优化?
*请认真填写需求信息,我们会在24小时内与您取得联系。