slice[0:0]在Go中有什么作用?
我最近在 Golang 降价解析器中看到了以下代码:
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切片上的 ,以便可以重新使用底层数组。如果为每次迭代创建一个全新的切片,它可以避免可能需要的分配。