Complex Data Types in Golang (go)

DiwakarDiwakar
3 min read

let's delve into the world of complex data types in Go:

1. Arrays:

An array is a fixed-size collection of elements of the same type.

Declaration:

var arr [5]int

Key Points:

  • Fixed size: The size of an array is defined at declaration and cannot be changed.

  • Same Type: All elements in the array are of the same type.

  • Contiguous Memory: Arrays are stored as contiguous memory blocks.

Use-cases:

  • When you need to allocate a fixed-size collection of elements.

  • Performance-critical situations due to its predictable memory layout.

2. Slices:

A slice is a flexible, dynamic-sized version of an array. It provides more power, flexibility, and convenience compared to arrays.

Declaration:

numbers := []int{1, 2, 3, 4, 5}

Key Points:

  • Dynamic size: Slices can grow or shrink.

  • Reference Type: Unlike arrays, slices are reference types. Modifying the slice will reflect in other references to the same slice.

  • Underlying Array: Slices are built on top of arrays. Appending elements may cause Go to create a new underlying array for the slice.

Use-cases:

  • When you need a list-like structure without knowing its size beforehand.

  • Manipulating sequences of elements with the convenience of built-in methods.

3. Maps:

Maps are unordered collections of key-value pairs. They are similar to dictionaries or hash tables in other languages.

Declaration:

m := map[string]int{"apple": 5, "banana": 10}

Key Points:

  • Unordered: Iterating over map entries doesn't guarantee any specific order.

  • Unique Keys: Each key in the map is unique.

  • Reference Type: Like slices, maps are reference types.

Use-cases:

  • Associating keys with values for efficient look-up.

  • Implementing structures like caches, sets (by using a map with empty structs as values).

4. Structs:

A struct is a composite data type that groups together zero or more fields with heterogenous types under a single type name.

Declaration:

type Person struct {
    Name string
    Age  int
}
john := Person{"John Doe", 30}

Key Points:

  • Grouping Data: Structs are useful to combine different fields related to a single entity.

  • Value Type: Unlike slices and maps, structs are value types.

Use-cases:

  • Modeling and representing objects or more complex data types.

  • Grouping related fields together, like representing a database record or request/response formats.

Differences:

  • Fixed vs. Dynamic: Arrays are fixed-size, slices are dynamic.

  • Value vs. Reference: Arrays and structs are value types; modifications won't affect copies. Slices and maps are reference types; modifications reflect on every reference.

  • Use Cases: Use arrays for fixed-size collections, slices for dynamic collections, maps for key-value storage, and structs for grouping related fields.

Understanding when to use each of these types can significantly enhance code clarity, maintainability, and performance.

Thank you for reading. I encourage you to follow me on Twitter where I regularly share content about JavaScript and React, as well as contribute to open-source projects and learning golang. I am currently seeking a remote job or internship.

Twitter: https://twitter.com/Diwakar_766

GitHub: https://github.com/DIWAKARKASHYAP

Portfolio: https://diwakar-portfolio.vercel.app/

10
Subscribe to my newsletter

Read articles from Diwakar directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Diwakar
Diwakar

As a passionate developer, I thrive on acquiring new knowledge. My journey began with web development, and I am now actively engaged in open source contributions, aiding individuals and businesses.