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