2017-01-28 4 views
1

создает неявный массив размером 15 и срез (a) создает неглубокую копию неявного массива и указывает на первые 7 элементов в массиве.Как срез работает в GO?

Рассмотрим,

var a []int; 

создает нулевой длины кусок, который не указывает на какой-либо неявного массива.

a = append(a, 9, 86); 

создает новое неявное массив длины 2 и добавляет значения 9 и 86. ломтик (a) указывает, что новый неявной массив, где

len(a) is 2 и cap(a) >= 2


Мой вопрос:

это правильное понимание?

+0

Возможно, вам захочется работать через «Тур похода» (tour.golang.org), особенно части среза. – Volker

ответ

1

Как я упоминал «Declare slice or make slice?», нулевое значение среза (nil) действует как срез нулевой длины.

Таким образом, вы можете напрямую добавить a []int.

Вам нужно будет сделать ломтик (make([]int, 0)), только если вы хотите вернуть пустой кусочек (вместо nil).
Если нет, не нужно выделять память перед началом добавления.
Смотрите также «Arrays, slices (and strings): The mechanics of 'append': Nil»

нилъ срез функционально эквивалентен ломтиком нулевой длины, даже если он указывает на нет. Он имеет нулевую длину и может быть добавлен к распределению.

Смежные вопросы