
go 语言中没有 `slice.length` 这样的字段或方法,必须使用内置函数 `len()` 获取切片长度,这是 go 的语法规范,也是与 javascript 等语言的关键区别。
在 Go 中,切片(如 []int)是引用类型,其长度和容量属于运行时元信息,不能通过点号(.)访问字段形式获取——fibonacciNumbers.length 是非法语法,编译器会报错:type []int has no field or method length。
✅ 正确做法是调用内置函数 len():
package main
var fibonacciNumbers = []int{0, 1}
func getIthFibo(i int) int {
if i < len(fibonacciNumbers) { // ✅ 正确:使用 len()
return fibonacciNumbers[i]
}
// ... 实现递推逻辑或 panic 处理
return -1 // 占位返回
}⚠️ 注意事项:
- len() 是编译器内置函数,不是方法,不可被重载,也不属于任何类型;
- 对切片、数组、字符串、map 和 channel 均有效(语义略有不同),但对普通结构体、指针或自定义类型无效;
- len(slice) 返回当前元素个数(即逻辑长度),cap(slice) 返回底层数组可容纳的最大元素数;
- 切片为空时 len([]int{}) == 0,下标访问前务必先校验边界,避免 panic:panic: runtime error: index out of range。
? 小技巧:Go 不提供 .length 或 .size() 是有意为之的设计选择——强调显式性与零成本抽象。所有长度查询均为 O(1) 时间复杂度,无运行时开销。
总结:永远用 len(x),而非 x.length 或 x.len();这是 Go 语言基础且不可绕过的约定。










