Slices
Slices are similar to arrays, but offer more powerful ways of dealing with data.
The type of a slice is determined only by the elements it contains, and is independent of the the number of elements in the slice. Slices also support various built-in methods in golang including make
, copy
, append
etc. We will explore some of these methods below.
Slices are similar to C++ vectors in that they can grow and shrink dynamically. We can initialize a string
slice below with 4 initial values.
package main
import "fmt"
func main() {
cars := make([]string, 4)
fmt.Println("empty slice:", cars)
cars[0] = "tesla"
cars[1] = "bmw"
cars[2] = "honda"
// print out all the values currently in cars
fmt.Println(cars)
fmt.Printf("Third car: %s", s[2])
// the len method works on slices too
fmt.Println("len:", len(s))
// add new items to the cars slice
// Note: we need to reassign cars to the value of append
cars = append(cars, "rivian")
cars = append(s, "toyota", "buick")
fmt.Println(cars)
// make a copy of the car slice
cars_copy := make([]string, len(cars))
copy(cars_copy, cars)
fmt.Println(cars_copy)
}
Slices also support "slicing" using a colon symbol. "slicing" here refers to getting only parts of a slice data structure. For example,
package main
import "fmt"
func main() {
authors := []string {"Hurston", "Artwood", "Didion", "Le Guin", "Morrison", "Walker"}
// "slicing" takes the format slice[low:high].
// For example, this gets a slice of the elements
// authors[2], authors[3], and authors[4].
some_authors := s[2:5]
fmt.Println("some authors:", some_authors)
// slice up to (but excluding) authors[5].
famous_authors = authors[:5]
fmt.Println("These authors are famous: ", famous_authors)
// slice from 3 (inclusive) to the end
contemporary_authors = authors[3:]
}
Last updated