Golang clear 函数
最后修改时间 2025 年 5 月 8 日
本教程将解释如何在 Go 中使用 `clear` 内置函数。我们将通过实际示例介绍其在切片和映射中的用法。
Go 1.21 中引入了 `clear` 函数,用于将切片中的元素归零,并删除映射中的所有条目。它提供了一种干净的方式将集合重置为其零状态。
在 Go 中,`clear` 的操作方式取决于它所应用的类型。对于切片,它将元素设置为其零值。对于映射,它会删除所有键。
清空切片
`clear` 最简单的用法是将切片中的所有元素重置为其零值。此示例演示了基本的切片清空。
注意: 切片的长度保持不变;只有元素被归零。
basic_clear_slice.go
package main import "fmt" func main() { numbers := []int{1, 2, 3, 4, 5} fmt.Println("Before clear:", numbers) clear(numbers) // Zero out all elements fmt.Println("After clear:", numbers) fmt.Println("Slice length:", len(numbers)) }
`clear` 函数将所有整数元素设置为 0。操作后,切片的长度和容量保持不变。
清空映射
当应用于映射时,`clear` 会删除所有键值对。此示例展示了 map 清空的操作。
clear_map.go
package main import "fmt" func main() { userRoles := map[string]string{ "alice": "admin", "bob": "editor", "eve": "viewer", } fmt.Println("Before clear:", userRoles) fmt.Println("Map length:", len(userRoles)) clear(userRoles) // Remove all entries fmt.Println("After clear:", userRoles) fmt.Println("Map length:", len(userRoles)) }
清空后,映射将变为空。与切片清空不同,它实际上会删除所有条目,而不是将值归零。
清空结构体切片
`clear` 通过将所有字段设置为其零值来处理复杂类型。此示例演示了清空结构体切片。
clear_struct_slice.go
package main import "fmt" type Point struct { X, Y int Name string } func main() { points := []Point{ {1, 2, "A"}, {3, 4, "B"}, {5, 6, "C"}, } fmt.Println("Before clear:", points) clear(points) fmt.Println("After clear:", points) }
切片中每个结构体的所有字段都设置为其零值。数字字段变为 0,字符串字段变为空字符串。
清空包含接口值的映射
`clear` 通过完全删除所有条目来处理包含接口值的映射。此示例展示了清空具有混合值类型的映射。
clear_interface_map.go
package main import "fmt" func main() { data := map[string]interface{}{ "name": "Alice", "age": 30, "active": true, "scores": []int{90, 85, 95}, } fmt.Println("Before clear:", data) fmt.Println("Map length:", len(data)) clear(data) fmt.Println("After clear:", data) fmt.Println("Map length:", len(data)) }
无论映射包含何种值类型,它都会被完全清空。这与切片中将元素归零的行为不同。
清空切片的一部分
我们可以使用切片操作来清空切片的特定部分。此示例展示了如何清空元素范围。
clear_slice_portion.go
package main import "fmt" func main() { data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} fmt.Println("Original:", data) // Clear elements 3 through 7 (inclusive) clear(data[3:8]) fmt.Println("After clearing portion:", data) }
只有指定的切片部分被清空。切片的其他部分保持不变。此技术对于部分重置很有用。
来源
本教程通过清空各种场景下的切片和映射的实际示例,讲解了 Go 中的 `clear` 函数。