我最近在 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]
的作用感到困惑。这是一种在数组前面添加的方法吗?
此切片
[0:0]
创建一个具有相同支持数组但长度为零的切片。在您的示例中,它真正所做的只是“重置”切片上的 len
,以便可以重新使用底层数组。如果为每次迭代创建全新的切片,它可以避免可能需要的分配。