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
函数。