Когда емкость отличается от конца массива - начала среза? - PullRequest
0 голосов
/ 01 августа 2020

В книге Go Язык программирования авторы заявили следующее (в разделе 4.2, посвященном фрагментам):

Длина [фрагмента] - это число элементов среза; он не может превышать емкость, которая обычно представляет собой количество элементов между началом среза и концом базового массива.

Вопрос

Поскольку авторы решили используйте слово « обычно », это означает, что на самом деле могут быть обстоятельства, при которых емкость среза отличается от количества элементов между началом среза и концом базового массива - -когда это будет так?

Другими словами, когда приведенное ниже выражение будет true:

cap(mySlice) != len(underlyingArray) - startIndexOfSlice

Единственный случай, о котором я могу думать, это когда срез nil, и в этом случае базового массива не будет.

1 Ответ

3 голосов
/ 01 августа 2020

Полное выражение среза может устанавливать емкость, не превышающую весь базовый массив.

x := make([]string, 20)
y := x[0:10:10]

fmt.Println("x:", len(x), cap(x)) // prints x: 20 20
fmt.Println("y:", len(y), cap(y)) // prints y: 10 10

Срезы x и y используют один и тот же базовый массив, но емкость y меньше емкости x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...