slice[0:0] 在 Go 中做什么?

问题描述 投票:0回答:1

我最近在 Golang markdown 解析器中看到以下代码:

    blankLines := make([]lineStat, 0, 128)
    isBlank := false
    for { // process blocks separated by blank lines
        _, lines, ok := reader.SkipBlankLines()
        if !ok {
            return
        }
        lineNum, _ := reader.Position()
        if lines != 0 {
            blankLines = blankLines[0:0]
            l := len(pc.OpenedBlocks())
            for i := 0; i < l; i++ {
                blankLines = append(blankLines, lineStat{lineNum - 1, i, lines != 0})
            }
        }

我对

blankLines = blankLines[0:0]
的作用感到困惑。这是一种在数组前面添加的方法吗?

go
1个回答
10
投票

此切片

[0:0]
创建一个具有相同支持数组但长度为零的切片。在您的示例中,它真正所做的只是“重置”切片上的
len
,以便可以重新使用底层数组。如果为每次迭代创建全新的切片,它可以避免可能需要的分配。

© www.soinside.com 2019 - 2024. All rights reserved.