ZetCode

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 语言规范

本教程通过清空各种场景下的切片和映射的实际示例,讲解了 Go 中的 `clear` 函数。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程