дължина и капацитет в Go срезове

Да кажем, че имаме парче от b такива

b:= make([]int, 0, 5) // length: 0, cap: 5

и парче "c", направено от парче "b"

c:= b[:2]  // length: 2 (?), cap: 5

Въпросът защо имаме дължина 2 за "c"? Очаквах и дължина нула, като b, тъй като правим c от b


person Yar    schedule 22.12.2015    source източник


Отговори (1)


Да, нарязването може да ви осигури достъп до елементите отвъд len на оригиналния срез (макар и не отвъд неговия cap или кой знае до каква памет ще имате достъп).

Това означава, например, че можете да приложите подобна на append функционалност, връщайки "нараснал" срез с len, увеличен до нещо по-близко до cap. Това означава, че достъпът на append до региона между len и cap не е достъпен само за вградени функции; вие също го имате. Вижте Добавете: пример в записа в блога на Go за срезове, за да видите как е направено (и ако се интересувате, прочетете цялата публикация; помага на срезовете като цяло да имат смисъл).

Спецификацията на изразите на срезтипове срезове) и страницата Slice Tricks също може да е интересно.

person twotwotwo    schedule 22.12.2015