Go Slices: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 20: Line 20:
Type inferred declaration, where the length and the capacity of the slice are specified can be performed using <tt>[[Go Slices#make.28.29|make()]]</tt>.
Type inferred declaration, where the length and the capacity of the slice are specified can be performed using <tt>[[Go Slices#make.28.29|make()]]</tt>.


The slices can also be created with the "slice" operator:
The slices can also be created with the "slice" expression:


<pre>
<pre>
Line 34: Line 34:


The "low" index is the index where to start the slice and "high" is the index where to end the slice - ''but not index itself''.
The "low" index is the index where to start the slice and "high" is the index where to end the slice - ''but not index itself''.
Special forms of the "slice" expression:
* <tt>a[i:]</tt> is equivalent with <tt>a[i:len(a}]</tt>.
* <tt>a[:i]</tt> is equivalent with <tt>a[0:i]>tt>
* <tt>a[:]</tt> is equivalent with <tt>a[0:len(a)]</tt>


=Slice Literals=
=Slice Literals=

Revision as of 00:01, 28 March 2016

Internal

Overview

A slice is a reference type that implements a dynamic array. Slices are indexable, and they have a variable length. They are always associated with an underlying array, and the slice length cannot be longer than the underlying array - but it can be shorter. The slice's capacity is equal to the length on the underlying array.

TODO Deep difference between slice and array (memory model, etc.)

Declaration

A slice declaration is similar to an array's except the length is not specified. The slice is created with a zero length.

var s []int

Type inferred declaration, where the length and the capacity of the slice are specified can be performed using make().

The slices can also be created with the "slice" expression:

<array_identifier>[<low>:<high>]

Example:

var a [5]int
s := a[0:2]

The "low" index is the index where to start the slice and "high" is the index where to end the slice - but not index itself.

Special forms of the "slice" expression:

  • a[i:] is equivalent with a[i:len(a}].
  • a[:i] is equivalent with a[0:i]>tt>
  • a[:] is equivalent with a[0:len(a)]

Slice Literals

Slice Operators and Functions

make()

<slice_identifier> := make([]<slice_element_type>, <slice_length>, <capacity>)
s := make([]int, 5)
s1 := make([]int, 5, 10)

append()

copy()

Slice built-in functions append(), copy().