# #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]
делает. Является ли это способом добавления к массиву?
Комментарии:
1. Это не массив, здесь вы имеете дело со срезами
2. Это считается базовой концепцией языка, рассмотренной здесь , например.
3. О, упс … я имел в виду кусочек. Я был просто сбит с толку, потому что мне казалось, что не было никакой цели создавать пустой срез.
Ответ №1:
Это [0:0]
срезание создает срез, который имеет тот же резервный массив, но нулевой длины. Все, что он действительно делает,-это «сбрасывает» len
на срезе, чтобы базовый массив можно было использовать повторно. Это позволяет избежать выделения, которое может потребоваться, если для каждой итерации был создан совершенно новый срез.