Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Choosing the Right Collection | Core Collections in Go
/
Data Structures in Go

bookChoosing the Right Collection

Desliza para mostrar el menú

Choosing the right collection is essential for writing efficient and maintainable code in Go. Each collection type offers unique strengths and trade-offs, and your choice directly affects memory usage, performance, and code clarity.

Go provides three primary collection types:

  • Arrays: Fixed-size sequences of elements; ideal when the number of items is known and does not change;
  • Slices: Flexible, dynamically-sized views over arrays; perfect for collections that grow or shrink during execution;
  • Maps: Unordered collections of key-value pairs; best when you need to associate and retrieve values using unique keys.

Understanding when and how to use each collection will help you solve problems more effectively and write idiomatic Go code.

Arrays in Go

Arrays in Go are fixed-size collections that hold elements of the same type. When you create an array, you specify its length, and this size cannot change during the program's execution.

Characteristics of Arrays

  • Arrays have a fixed length, determined at creation;
  • All elements must be of the same type;
  • Elements are stored in contiguous memory locations, allowing fast access by index;
  • Arrays are value types, so assigning one array to another copies all elements.

When to Use Arrays

Use arrays when:

  • You know the exact number of elements you need in advance;
  • The size of the collection will not change;
  • You want fast, indexed access to elements;
  • You need to work with a small, fixed-size dataset, such as days of the week or a set of configuration flags.

Simple Array Example

Here is a simple example of declaring, initializing, and accessing an array in Go:

package main

import "fmt"

func main() {
    // Declare an array of 5 integers
    var numbers [5]int
    
    // Assign values to the array
    numbers[0] = 10
    numbers[1] = 20
    numbers[2] = 30
    numbers[3] = 40
    numbers[4] = 50

    // Print all elements
    fmt.Println(numbers)

    // Access a specific element
    fmt.Println("The third number is:", numbers[2])
}

This program creates an array called numbers with space for 5 integers, assigns values, and prints both the entire array and a single element by index.

Slices in Go

Slices are a core collection type in Go that let you work with sequences of elements. Unlike arrays, which have a fixed length, slices are dynamic — you can grow or shrink them as your program runs.

Dynamic Nature of Slices

  • Slices can change in length while your program is running;
  • You can add or remove elements using built-in functions like append;
  • Slices are backed by arrays, but you never have to manage the underlying array directly.

When to Use Slices

  • When you need a collection that can grow or shrink as data changes;
  • If you want to pass a sequence of values to functions without worrying about the exact length;
  • When you need to share or modify parts of an existing collection without copying all the data.

Key Differences Between Slices and Arrays

  • Arrays have a fixed size set at creation; slices can grow or shrink;
  • Arrays are value types (copy on assignment); slices are reference types (share underlying data);
  • Slices offer more flexibility and are used far more often in Go programs.

Simple Slice Example

package main

import "fmt"

func main() {
    // Create a slice of integers with three elements
    numbers := []int{10, 20, 30}
    fmt.Println("Original slice:", numbers)

    // Append a new element
    numbers = append(numbers, 40)
    fmt.Println("After append:", numbers)
}

This program creates a slice, prints it, appends an element, and prints the updated slice. Use slices whenever you need a flexible, dynamic list of items in Go.

Maps in Go

A map in Go is a built-in collection type that stores data as key-value pairs. You use a map when you need to associate values with unique keys and access those values quickly using the key.

When to Use Maps

  • When you need fast lookups by a unique identifier, such as a username or product ID;
  • When you want to group related values and retrieve them by a specific key;
  • When the number of elements can change dynamically.

Maps are not ordered, and their keys must be of a type that is comparable (such as string, int, or custom types with comparable fields).

Simple Map Example

Here is a basic example of declaring, initializing, and using a map in Go:

package main

import "fmt"

func main() {
    // Create a map that associates country codes with country names
    countryCodes := map[string]string{
        "US": "United States",
        "CA": "Canada",
        "JP": "Japan",
    }

    // Access a value by key
    fmt.Println(countryCodes["CA"]) // Output: Canada

    // Add a new key-value pair
    countryCodes["FR"] = "France"

    // Check if a key exists
    code := "JP"
    value, exists := countryCodes[code]
    if exists {
        fmt.Printf("%s stands for %s\n", code, value)
    }
}

Use a map whenever you need efficient, direct access to data by a unique key.

Summary: Choosing Between Arrays, Slices, and Maps

When selecting a collection in Go, focus on your data's structure and how you plan to access or modify it. Here are the key differences:

  • Arrays:

    • Store a fixed number of elements of the same type;
    • Size is specified at declaration and cannot change;
    • Useful for situations where the number of elements is known and constant.
  • Slices:

    • Provide a flexible, dynamic view over arrays;
    • Can grow or shrink as needed;
    • Support powerful built-in functions for adding, removing, or copying elements;
    • Best choice for most sequential data where the size can change.
  • Maps:

    • Store key-value pairs for fast lookups;
    • Keys must be unique and of a comparable type;
    • Ideal for associating values with unique identifiers or searching by key.

Use arrays when you require a fixed-size, simple collection. Use slices for most sequential data tasks due to their flexibility. Use maps when you need to associate values with unique keys or require efficient lookups.

question mark

When should you use an array instead of a slice or map in Go?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 1. Capítulo 4
some-alt