如何使用Golang len获取长度_Golang字符串与集合长度说明
发布时间 - 2026-01-21 00:00:00 点击率:次len函数只能用于数组、切片、字符串、map和channel;对nil切片或nil map调用合法且返回0;字符串len返回UTF-8字节数,非Unicode字符数;[]rune可获取真实字符数但有性能开销。
len 函数能直接获取哪些类型的长度
len 是 Go 内置函数,不是方法,只能用于编译期已知长度的类型:数组([5]int)、切片([]string)、字符串(string)、map(map[string]int)、channel(chan int)。它不能用于结构体、指针、函数或自定义类型(除非底层类型是上述之一)。
常见错误是试图对 nil 切片或 nil map 调用 len —— 实际上这完全合法:len(nil切片) 返回 0,len(nil map) 也返回 0。真正 panic 的是取值(如 m["k"])或遍历(for range nil map)。
-
len("你好")返回 6(字节数,UTF-8 编码) -
len([]rune("你好"))返回 2(Unicode 码点数) -
len([3]int{1,2,3})返回 3(数组长度固定) -
len(map[int]string{})返回 0(空 map)
字符串 len 返回的是字节数,不是字符数
Go 字符串底层是只读字节序列,len(s) 永远返回 UTF-8 编码后的字节数。中文、emoji 等多字节字符会拉高这个值,但不反映“人眼看到的字符个数”。
如果业务需

[]rune:
name := "Hello世界?" fmt.Println(len(name)) // 输出: 13(H-e-l-l-o-世-界-? 各自 UTF-8 字节数之和) fmt.Println(len([]rune(name))) // 输出: 9(5 ASCII + 2 汉字 + 1 emoji = 9 个 rune)
注意:[]rune(s) 会分配新底层数组,对超长字符串(如 MB 级日志)频繁调用有性能开销。
切片和数组的 len 行为差异
数组长度是类型的一部分,len 在编译期确定;切片长度是运行时属性,可变。
-
arr := [4]int{1,2,3,4}; len(arr)→ 永远是 4,不可修改 -
sl := []int{1,2,3}; sl = sl[:2]; len(sl)→ 变为 2 -
len(sl)和cap(sl)可能不同:切片可能只用了底层数组一部分
误把 cap 当 len 用会导致逻辑错误,比如循环写满整个容量而非当前长度:
data := make([]byte, 0, 1024)
data = append(data, 'a', 'b')
// 错误:for i := 0; i < cap(data); i++ { ... } —— 会访问未初始化内存
// 正确:for i := 0; i < len(data); i++ { ... }
map 和 channel 的 len 使用场景与陷阱
len(m) 返回当前键值对数量,len(ch) 返回当前缓冲区中待读取元素个数。两者都常用于条件判断,但要注意并发安全。
- map 的
len不是原子操作,多 goroutine 写入时,即使只读len也可能触发 panic(Go 1.19+ 对并发读写 map 的 panic 更敏感) - channel 的
len(ch)是瞬时快照,无法替代select或range做同步控制 - 不要用
len(ch) == cap(ch)判断是否满 —— 非缓冲 channel 的cap是 0,len也是 0,永远相等
真正需要长度感知的并发场景,应配合 sync.Map、互斥锁或 channel 自身的阻塞语义来设计,而不是依赖 len 做轮询判断。
最容易被忽略的是:字符串的 len 和 []rune 的 len 在语义上完全不同,而 Go 不提供类似 Python 的 len(s, encoding='utf8') 这种带选项的接口 —— 开发者必须自己决定用字节还是 rune,并承担转换成本。
# python
# go
# golang
# 编码
# app
# 字节
# 键值对
# len函数
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
教学论文网站制作软件有哪些,写论文用什么软件
?
如何彻底卸载建站之星软件?
如何在企业微信快速生成手机电脑官网?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel PHP版本要求一览_Laravel各版本环境要求对照
如何在Windows环境下新建FTP站点并设置权限?
中山网站制作网页,中山新生登记系统登记流程?
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
用v-html解决Vue.js渲染中html标签不被解析的问题
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在橙子建站上传落地页?操作指南详解
如何快速登录WAP自助建站平台?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何用wdcp快速搭建高效网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
如何快速查询域名建站关键信息?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
三星、SK海力士获美批准:可向中国出口芯片制造设备
网站制作价目表怎么做,珍爱网婚介费用多少?
Python数据仓库与ETL构建实战_Airflow调度流程详解
微信小程序 input输入框控件详解及实例(多种示例)
SQL查询语句优化的实用方法总结
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
如何在服务器上配置二级域名建站?
,网页ppt怎么弄成自己的ppt?
深圳网站制作的公司有哪些,dido官方网站?
如何在云虚拟主机上快速搭建个人网站?
*服务器网站为何频现安全漏洞?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
中山网站推广排名,中山信息港登录入口?
如何快速搭建安全的FTP站点?
Laravel如何为API生成Swagger或OpenAPI文档
无锡营销型网站制作公司,无锡网选车牌流程?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
EditPlus 正则表达式 实战(3)
Mybatis 中的insertOrUpdate操作

