Golang len 函数
最后修改时间 2025 年 5 月 8 日
本教程将介绍如何在 Go 中使用内置的 len 函数。我们将通过不同数据类型的实际示例来讲解基本用法。
len 函数用于获取 Go 中各种类型的长度。它可用于字符串、数组、切片、映射和通道。返回值始终是一个 int,表示元素的数量。
在 Go 中,len 是一个内置函数,它提供了一种跨不同数据结构衡量大小的一致方法。对于数组,它在编译时进行评估;对于切片等动态类型,它在运行时进行评估。
基本字符串长度示例
len 最简单的用法是测量字符串的字节长度。此示例演示了基本的字符串长度计算。
注意: 对于 Unicode 字符串,len 计算的是字节数,而不是字符数。
string_len.go
package main
import "fmt"
func main() {
str := "Hello, 世界"
fmt.Println("String:", str)
fmt.Println("Length in bytes:", len(str))
// To count runes (Unicode code points) instead:
fmt.Println("Length in runes:", len([]rune(str)))
}
字符串包含 ASCII 和 Unicode 字符。由于非 ASCII 字符的 UTF-8 编码,字节长度与字符数不同。
数组和切片长度
我们可以使用 len 来获取数组和切片的长度。此示例展示了静态和动态集合的长度计算。
array_slice_len.go
package main
import "fmt"
func main() {
// Array (fixed size)
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println("Array length:", len(arr))
// Slice (dynamic size)
slice := []int{1, 2, 3}
fmt.Println("Initial slice length:", len(slice))
// Append elements
slice = append(slice, 4, 5)
fmt.Println("Updated slice length:", len(slice))
}
数组长度保持不变,而切片长度会随着元素的添加而改变。两者都使用相同的 len 函数语法。
映射长度
len 函数可与映射一起使用,以计算键值对的数量。此示例显示了修改前后映射长度的计算。
map_len.go
package main
import "fmt"
func main() {
colors := map[string]string{
"red": "#FF0000",
"green": "#00FF00",
"blue": "#0000FF",
}
fmt.Println("Initial map length:", len(colors))
// Add a new entry
colors["white"] = "#FFFFFF"
fmt.Println("After addition:", len(colors))
// Delete an entry
delete(colors, "green")
fmt.Println("After deletion:", len(colors))
}
映射长度会随着键值对的添加或删除而改变。len 函数提供映射中当前元素的计数。
通道长度
对于通道,len 返回队列中元素的数量。此示例演示了通信过程中通道长度的测量。
channel_len.go
package main
import "fmt"
func main() {
ch := make(chan int, 3)
fmt.Println("Empty channel length:", len(ch))
ch <- 1
ch <- 2
fmt.Println("After two sends:", len(ch))
<-ch
fmt.Println("After one receive:", len(ch))
close(ch)
}
通道长度反映了缓冲区中当前元素的数量。这对于监控并发程序中的通道使用情况很有用。
具有 Len 方法的自定义类型
虽然 len 可与内置类型一起使用,但我们可以为自定义类型实现自己的 Len 方法。此示例同时展示了这两种方法。
custom_len.go
package main
import "fmt"
type Queue struct {
elements []int
}
func (q *Queue) Len() int {
return len(q.elements)
}
func main() {
q := Queue{elements: []int{1, 2, 3, 4}}
// Using custom Len method
fmt.Println("Queue length (method):", q.Len())
// Using built-in len on the slice
fmt.Println("Queue length (built-in):", len(q.elements))
}
自定义 Len 方法在内部使用内置的 len 函数,提供了一个干净的接口。两种方法都得到相同的结果。
来源
本教程通过字符串、数组、切片、映射和通道的实际示例,介绍了 Go 中的 len 函数。