{"id":1073,"date":"2026-08-16T22:48:44","date_gmt":"2026-08-16T22:48:44","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1073"},"modified":"2026-08-16T22:48:45","modified_gmt":"2026-08-16T22:48:45","slug":"go-tutorials-arrays-slices-maps-and-structs","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/go-tutorials-arrays-slices-maps-and-structs\/","title":{"rendered":"Go Tutorials: Arrays, Slices, Maps, and Structs"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM-1024x683.png\" alt=\"\" class=\"wp-image-1074\" srcset=\"https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM-1024x683.png 1024w, https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM-300x200.png 300w, https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM-768x512.png 768w, https:\/\/www.devopsschool.com\/tutorials\/wp-content\/uploads\/2026\/08\/ChatGPT-Image-Aug-17-2026-04_18_15-AM.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These four concepts are fundamental Go data structures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple way to remember them:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Array<\/strong> \u2192 fixed number of values.<\/li>\n\n\n\n<li><strong>Slice<\/strong> \u2192 flexible list of values.<\/li>\n\n\n\n<li><strong>Map<\/strong> \u2192 key \u2192 value lookup.<\/li>\n\n\n\n<li><strong>Struct<\/strong> \u2192 group different fields into one meaningful object.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Arrays<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is an Array?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An <strong>array<\/strong> stores multiple values of the <strong>same data type<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The important point is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">An array has a <strong>fixed size<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var marks &#91;5]int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates an array capable of storing exactly <strong>5 integers<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Index:   0   1   2   3   4\n       +---+---+---+---+---+\nValue: |10 |20 |30 |40 |50 |\n       +---+---+---+---+---+<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Indexes start from <code>0<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">How to create an Array<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;5]int{10, 20, 30, 40, 50}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go can also calculate the size:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;...]int{10, 20, 30, 40, 50}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here <code>...<\/code> means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">&#8220;Go, count the elements and determine the array size.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">The result is still:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;5]int<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Accessing Array Elements<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(numbers&#91;0])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Change a value:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers&#91;2] = 100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;10 20 100 40 50]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Loop through an Array<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>for index, value := range numbers {\n    fmt.Println(index, value)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 10\n1 20\n2 30\n3 40\n4 50<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Why use Arrays?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Arrays are useful when the number of elements is <strong>known and fixed<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>days := &#91;7]string{\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n    \"Sunday\",\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There will always be exactly 7 days in this particular representation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">When should I use an Array?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use an array when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>size is known<\/li>\n\n\n\n<li>size will not change<\/li>\n\n\n\n<li>fixed-size data is meaningful<\/li>\n\n\n\n<li>memory layout matters<\/li>\n\n\n\n<li>you specifically need <code>[N]T<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RGB values\ncoordinates\nmatrix dimensions\nfixed sensor readings\ncryptographic data\nfixed buffers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rgb := &#91;3]int{255, 100, 50}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Slices<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is a Slice?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>slice<\/strong> is similar to an array but much more flexible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A slice:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">stores multiple values of the same type but can grow and shrink logically.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>names := &#91;]string{\"John\", \"David\", \"Mary\"}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Notice the difference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Array:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;3]string<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Slice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;]string<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No number inside <code>[]<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Array vs Slice syntax<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Array:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;3]int{10, 20, 30}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Slice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;]int{10, 20, 30}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That small syntax difference is very important.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Why do Slices exist?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine you&#8217;re storing users.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Initially:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Alice\nBob\nJohn<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tomorrow another user registers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Mary<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">With a fixed-size array, this can become inconvenient.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With a slice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := &#91;]string{\"Alice\", \"Bob\", \"John\"}\n\nusers = append(users, \"Mary\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Alice Bob John Mary]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is why slices are used far more frequently than arrays in normal Go programs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">append()<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>append()<\/code> adds an element to a slice.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;]int{10, 20}\n\nnumbers = append(numbers, 30)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;10 20 30]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add multiple values:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers = append(numbers, 40, 50, 60)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;10 20 30 40 50 60]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">len() and cap()<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Slices have two important properties:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>len(slice)\ncap(slice)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">len<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Number of elements currently inside the slice.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">cap<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Amount of space available in the underlying storage before Go may need to allocate more space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := make(&#91;]int, 3, 10)\n\nfmt.Println(len(numbers))\nfmt.Println(cap(numbers))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3\n10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think of it like a parking lot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Capacity = 10 parking spaces\nLength   = 3 cars currently parked\n\n+---+---+---+---+---+---+---+---+---+---+\n| X | X | X |   |   |   |   |   |   |   |\n+---+---+---+---+---+---+---+---+---+---+\n\nlen = 3\ncap = 10<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">make() with Slices<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Another common way to create slices is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := make(&#91;]int, 5)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This creates:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;0 0 0 0 0]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Because the zero value of <code>int<\/code> is <code>0<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can specify capacity too:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := make(&#91;]int, 5, 10)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>length   = 5\ncapacity = 10<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Slicing a Slice<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;]int{10, 20, 30, 40, 50}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can take part of it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>part := numbers&#91;1:4]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;20 30 40]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Why?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go slicing follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;start : end]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Start is included.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">End is excluded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers&#91;1:4]\n\nindex 1 -&gt; included\nindex 2 -&gt; included\nindex 3 -&gt; included\nindex 4 -&gt; excluded<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">When should I use a Slice?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use slices when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>number of values can change<\/li>\n\n\n\n<li>processing lists of records<\/li>\n\n\n\n<li>returning multiple items<\/li>\n\n\n\n<li>working with database results<\/li>\n\n\n\n<li>working with API results<\/li>\n\n\n\n<li>storing users\/products\/orders<\/li>\n\n\n\n<li>filtering data<\/li>\n\n\n\n<li>sorting data<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := &#91;]string{\"Alice\", \"Bob\"}\n\nusers = append(users, \"Charlie\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In everyday Go development:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Slices are usually preferred over arrays.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Maps<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is a Map?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>map<\/strong> stores data as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>key -&gt; value<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name -&gt; John\nage  -&gt; 30<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But all keys must have one type and all values must have one type for a given map.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages := map&#91;string]int{\n    \"John\":  30,\n    \"Alice\": 25,\n    \"Bob\":   35,\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Key type   = string\nValue type = int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>map&#91;string]int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Map where the key is a string and the value is an integer.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Easy real-world example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Think of a phone book.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name        Phone Number\n\nJohn   -&gt;   5551000\nAlice  -&gt;   5552000\nBob    -&gt;   5553000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In Go:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>phones := map&#91;string]string{\n    \"John\":  \"5551000\",\n    \"Alice\": \"5552000\",\n    \"Bob\":   \"5553000\",\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Access a Map Value<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(phones&#91;\"John\"])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>5551000<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Add a Map Value<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>phones&#91;\"David\"] = \"5554000\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now the map contains David.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Update a Map Value<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>phones&#91;\"John\"] = \"9999999\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The old value is replaced.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Delete from a Map<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>delete(phones, \"John\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now John&#8217;s entry is removed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Very Important: Checking if a Key Exists<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages := map&#91;string]int{\n    \"John\": 30,\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You could write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age := ages&#91;\"David\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But David doesn&#8217;t exist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go returns the zero value:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That creates ambiguity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maybe David exists and his age is actually <code>0<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So Go provides this syntax:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age, exists := ages&#91;\"David\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if exists {\n    fmt.Println(\"Age:\", age)\n} else {\n    fmt.Println(\"User not found\")\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This pattern is extremely common in Go.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Loop through a Map<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>for name, age := range ages {\n    fmt.Println(name, age)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Important:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Do not rely on normal map iteration being in a particular order.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Creating a Map with make()<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can also write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages := make(map&#91;string]int)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ages&#91;\"John\"] = 30\nages&#91;\"Alice\"] = 25<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">When should I use a Map?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Maps are useful when you need fast lookup using some identifier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>username -&gt; User\nuserID   -&gt; User\ncountry  -&gt; capital\nproductID -&gt; Product\nsetting -&gt; value\nword -&gt; count<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>countries := map&#91;string]string{\n    \"IN\": \"India\",\n    \"US\": \"United States\",\n    \"JP\": \"Japan\",\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(countries&#91;\"IN\"])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>India<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Structs<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is a Struct?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>struct<\/strong> groups several related pieces of data together.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike an array or slice, the fields can have <strong>different data types<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, a person has:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name\nAge\nEmail\nActive<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These aren&#8217;t necessarily the same type.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We can define:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Person struct {\n    Name   string\n    Age    int\n    Email  string\n    Active bool\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now <code>Person<\/code> becomes our own custom type.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Think of Struct as a Form<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine a registration form:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-----------------------\nName:   John\nAge:    30\nEmail:  john@test.com\nActive: true\n-----------------------<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That could be represented as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name   string\n    Age    int\n    Email  string\n    Active bool\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Creating a Struct<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>user := User{\n    Name:   \"John\",\n    Age:    30,\n    Email:  \"john@example.com\",\n    Active: true,\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Accessing Struct Fields<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use a dot:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(user.Name)\nfmt.Println(user.Email)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>John\njohn@example.com<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Updating Struct Fields<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>user.Age = 31<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Age = 31<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Why use Structs?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Without a struct, you might have separate variables:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name := \"John\"\nage := 30\nemail := \"john@example.com\"\nactive := true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine having 100 users.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That quickly becomes difficult.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name   string\n    Age    int\n    Email  string\n    Active bool\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then you can create:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user1 := User{...}\nuser2 := User{...}\nuser3 := User{...}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or even better:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := &#91;]User{\n    {...},\n    {...},\n    {...},\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This combines <strong>slices + structs<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is extremely common in Go applications.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">When should I use a Struct?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use structs to represent real things\/concepts such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User\nEmployee\nProduct\nOrder\nVehicle\nCustomer\nServer\nConfiguration\nAPI response\nDatabase record<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Product struct {\n    ID       int\n    Name     string\n    Price    float64\n    InStock  bool\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Big Comparison Table<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Array<\/th><th>Slice<\/th><th>Map<\/th><th>Struct<\/th><\/tr><\/thead><tbody><tr><td>Purpose<\/td><td>Fixed collection<\/td><td>Flexible collection<\/td><td>Key-value storage<\/td><td>Represent an object\/entity<\/td><\/tr><tr><td>Syntax<\/td><td><code>[5]int<\/code><\/td><td><code>[]int<\/code><\/td><td><code>map[string]int<\/code><\/td><td><code>struct {...}<\/code><\/td><\/tr><tr><td>Size<\/td><td>Fixed<\/td><td>Dynamic<\/td><td>Dynamic<\/td><td>Fixed fields by type definition<\/td><\/tr><tr><td>Same value type?<\/td><td>Yes<\/td><td>Yes<\/td><td>Values share a type<\/td><td>Fields can have different types<\/td><\/tr><tr><td>Access using<\/td><td>Index<\/td><td>Index<\/td><td>Key<\/td><td>Field name<\/td><\/tr><tr><td>Example access<\/td><td><code>a[0]<\/code><\/td><td><code>s[0]<\/code><\/td><td><code>m[\"John\"]<\/code><\/td><td><code>u.Name<\/code><\/td><\/tr><tr><td>Can grow?<\/td><td>No<\/td><td>Yes<\/td><td>Yes<\/td><td>Fields don&#8217;t dynamically grow<\/td><\/tr><tr><td><code>append()<\/code><\/td><td>No<\/td><td>Yes<\/td><td>No<\/td><td>No<\/td><\/tr><tr><td><code>delete()<\/code><\/td><td>No<\/td><td>No<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>Common use<\/td><td>Fixed data<\/td><td>Lists<\/td><td>Lookups<\/td><td>Objects\/entities<\/td><\/tr><tr><td>Typical example<\/td><td>RGB <code>[3]int<\/code><\/td><td><code>[]User<\/code><\/td><td><code>map[int]User<\/code><\/td><td><code>User<\/code><\/td><\/tr><tr><td>Used frequently?<\/td><td>Less often<\/td><td>Very often<\/td><td>Very often<\/td><td>Very often<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Think About Them This Way<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Structure<\/th><th>Real-world analogy<\/th><\/tr><\/thead><tbody><tr><td>Array<\/td><td>Row of exactly 5 lockers<\/td><\/tr><tr><td>Slice<\/td><td>Expandable shopping list<\/td><\/tr><tr><td>Map<\/td><td>Dictionary \/ phone book<\/td><\/tr><tr><td>Struct<\/td><td>Registration form<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">One Complete Example Using All Four<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine we&#8217;re creating a small employee application.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\n\/\/ Employee is a STRUCT.\n\/\/\n\/\/ A struct groups related information into one type.\n\/\/\n\/\/ Every employee has:\n\/\/ - ID\n\/\/ - Name\n\/\/ - Department\n\/\/ - Skills\ntype Employee struct {\n\tID         int\n\tName       string\n\tDepartment string\n\tSkills     &#91;]string \/\/ A struct field can itself contain a slice.\n}\n\nfunc main() {\n\n\t\/\/ ---------------------------------------------------\n\t\/\/ 1. ARRAY\n\t\/\/ ---------------------------------------------------\n\n\t\/\/ An array has a FIXED size.\n\t\/\/\n\t\/\/ Here we are saying:\n\t\/\/ \"Store exactly 3 office locations.\"\n\t\/\/\n\t\/\/ &#91;3]string\n\t\/\/  ^   ^\n\t\/\/  |   |\n\t\/\/ size data type\n\n\toffices := &#91;3]string{\n\t\t\"New York\",\n\t\t\"London\",\n\t\t\"Tokyo\",\n\t}\n\n\tfmt.Println(\"Offices:\")\n\n\tfor _, office := range offices {\n\t\tfmt.Println(office)\n\t}\n\n\n\t\/\/ ---------------------------------------------------\n\t\/\/ 2. SLICE\n\t\/\/ ---------------------------------------------------\n\n\t\/\/ A slice is a flexible collection.\n\t\/\/\n\t\/\/ Unlike the array above, we don't specify a size.\n\t\/\/\n\t\/\/ &#91;]Employee means:\n\t\/\/ \"A slice containing Employee structs.\"\n\n\temployees := &#91;]Employee{\n\t\t{\n\t\t\tID:         1,\n\t\t\tName:       \"Alice\",\n\t\t\tDepartment: \"Engineering\",\n\t\t\tSkills:     &#91;]string{\"Go\", \"Docker\"},\n\t\t},\n\t\t{\n\t\t\tID:         2,\n\t\t\tName:       \"Bob\",\n\t\t\tDepartment: \"DevOps\",\n\t\t\tSkills:     &#91;]string{\"Linux\", \"Kubernetes\"},\n\t\t},\n\t}\n\n\n\t\/\/ append() allows the slice to grow.\n\t\/\/\n\t\/\/ We add another Employee to the existing slice.\n\n\temployees = append(employees, Employee{\n\t\tID:         3,\n\t\tName:       \"Charlie\",\n\t\tDepartment: \"Engineering\",\n\t\tSkills:     &#91;]string{\"Go\", \"AWS\"},\n\t})\n\n\n\t\/\/ ---------------------------------------------------\n\t\/\/ 3. MAP\n\t\/\/ ---------------------------------------------------\n\n\t\/\/ We create a map for quick employee lookup.\n\t\/\/\n\t\/\/ Key:\n\t\/\/      int\n\t\/\/\n\t\/\/ Value:\n\t\/\/      Employee\n\t\/\/\n\t\/\/ Therefore:\n\t\/\/\n\t\/\/ map&#91;int]Employee\n\n\temployeeByID := make(map&#91;int]Employee)\n\n\n\t\/\/ Loop through employees and put each one into the map.\n\n\tfor _, employee := range employees {\n\n\t\t\/\/ employee.ID becomes the key.\n\t\t\/\/\n\t\t\/\/ Example:\n\t\t\/\/\n\t\t\/\/ 1 -&gt; Alice\n\t\t\/\/ 2 -&gt; Bob\n\t\t\/\/ 3 -&gt; Charlie\n\n\t\temployeeByID&#91;employee.ID] = employee\n\t}\n\n\n\t\/\/ ---------------------------------------------------\n\t\/\/ MAP LOOKUP\n\t\/\/ ---------------------------------------------------\n\n\t\/\/ Search for employee ID 2.\n\n\temployee, exists := employeeByID&#91;2]\n\n\t\/\/ exists tells us whether the key was found.\n\n\tif exists {\n\t\tfmt.Println(\"\\nEmployee found:\")\n\t\tfmt.Println(\"Name:\", employee.Name)\n\t\tfmt.Println(\"Department:\", employee.Department)\n\t\tfmt.Println(\"Skills:\", employee.Skills)\n\t}\n\n\n\t\/\/ ---------------------------------------------------\n\t\/\/ LOOP THROUGH SLICE OF STRUCTS\n\t\/\/ ---------------------------------------------------\n\n\tfmt.Println(\"\\nAll Employees:\")\n\n\tfor _, employee := range employees {\n\n\t\t\/\/ employee is an Employee STRUCT.\n\t\t\/\/\n\t\t\/\/ Therefore we access fields using:\n\t\t\/\/\n\t\t\/\/ employee.Name\n\t\t\/\/ employee.Department\n\n\t\tfmt.Println(\n\t\t\temployee.ID,\n\t\t\temployee.Name,\n\t\t\temployee.Department,\n\t\t)\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Possible output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Offices:\nNew York\nLondon\nTokyo\n\nEmployee found:\nName: Bob\nDepartment: DevOps\nSkills: &#91;Linux Kubernetes]\n\nAll Employees:\n1 Alice Engineering\n2 Bob DevOps\n3 Charlie Engineering<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What Happened in This Program?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The program demonstrates how these data structures often work <strong>together<\/strong>, rather than separately.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Array<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>offices := &#91;3]string{\n    \"New York\",\n    \"London\",\n    \"Tokyo\",\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We know there are exactly three office locations for this example.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Array\n\n&#91;New York] &#91;London] &#91;Tokyo]\n     0         1        2<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Struct<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We define what an employee looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Employee struct {\n    ID         int\n    Name       string\n    Department string\n    Skills     &#91;]string\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One employee might be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Employee\n+-------------------------+\n| ID         = 1          |\n| Name       = Alice      |\n| Department = Engineering|\n| Skills     = Go,Docker  |\n+-------------------------+<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Slice<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Then we need <strong>many employees<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>employees := &#91;]Employee{\n    ...\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>employees slice\n\n        |\n        v\n\n+-----------+\n| Employee  |\n| Alice     |\n+-----------+\n      |\n+-----------+\n| Employee  |\n| Bob       |\n+-----------+\n      |\n+-----------+\n| Employee  |\n| Charlie   |\n+-----------+<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A slice of structs is extremely common:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;]Employee<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Other examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;]User\n&#91;]Product\n&#91;]Order\n&#91;]Vehicle\n&#91;]Server<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Map<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Then suppose we want to quickly find an employee using their ID.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We create:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>map&#91;int]Employee<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Employee ID         Employee\n\n    1       ----&gt;     Alice\n\n    2       ----&gt;     Bob\n\n    3       ----&gt;     Charlie<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>employeeByID&#91;2]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">gives us Bob.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Which One Should I Choose?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A very useful decision process is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Do I need to represent ONE thing\nwith different properties?\n\n        YES\n         |\n         v\n       Struct<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name string\n    Age  int\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re storing many things:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Do I know the EXACT fixed number\nand it should remain fixed?\n\n        YES\n         |\n         v\n       Array<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>coordinates := &#91;3]float64{x, y, z}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Otherwise:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Need an ordered\/flexible list?\n\n        YES\n         |\n         v\n       Slice<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := &#91;]User{}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Need to find something\nusing a KEY?\n\n        YES\n         |\n         v\n        Map<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>usersByID := map&#91;int]User{}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Practical Application Example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine you&#8217;re building an e-commerce system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Product Struct<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One product:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type Product struct {\n    ID    int\n    Name  string\n    Price float64\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Slice of Products<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">All products:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>products := &#91;]Product{\n    {ID: 1, Name: \"Laptop\", Price: 1200},\n    {ID: 2, Name: \"Mouse\", Price: 25},\n    {ID: 3, Name: \"Keyboard\", Price: 70},\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Product\nProduct\nProduct\nProduct\nProduct\n...<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Map of Products<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Need fast lookup by product ID:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>productsByID := map&#91;int]Product{\n    1: {ID: 1, Name: \"Laptop\", Price: 1200},\n    2: {ID: 2, Name: \"Mouse\", Price: 25},\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>product := productsByID&#91;2]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Array<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Maybe your application has exactly 3 pricing tiers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pricingTiers := &#91;3]string{\n    \"Basic\",\n    \"Professional\",\n    \"Enterprise\",\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Very Important Combination Patterns<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In real Go applications, you&#8217;ll frequently encounter combinations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Slice of Structs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;]User<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Many users.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := &#91;]User{\n    {Name: \"Alice\"},\n    {Name: \"Bob\"},\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Probably the most common pattern.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Map of Structs<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>map&#91;int]User<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Find a user using an integer ID.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>users := map&#91;int]User{\n    1: {Name: \"Alice\"},\n    2: {Name: \"Bob\"},\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Map of Slices<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>map&#91;string]&#91;]string<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Each key points to a list.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skills := map&#91;string]&#91;]string{\n    \"Alice\": {\"Go\", \"Docker\", \"AWS\"},\n    \"Bob\":   {\"Java\", \"Spring\"},\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Alice ----&gt; Go\n            Docker\n            AWS\n\nBob ------&gt; Java\n            Spring<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Struct containing Slices<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name   string\n    Skills &#91;]string\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Meaning:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Each user can have many skills.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Struct containing a Map<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name     string\n    Settings map&#91;string]string\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user := User{\n    Name: \"Alice\",\n    Settings: map&#91;string]string{\n        \"theme\":    \"dark\",\n        \"language\": \"English\",\n    },\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Important Difference: Array vs Slice<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is one of the most important things beginners should understand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are <strong>different types<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;3]int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;4]int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a := &#91;3]int{1, 2, 3}\n\nb := &#91;4]int{1, 2, 3, 4}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>a<\/code> and <code>b<\/code> have different types.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>a := &#91;]int{1, 2, 3}\n\nb := &#91;]int{1, 2, 3, 4}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Both are:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;]int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is another reason slices are more convenient for general application development.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Quick Syntax Cheat Sheet<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Array<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;3]int{10, 20, 30}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Exactly 3 integers<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Slice<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers := &#91;]int{10, 20, 30}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Flexible list of integers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>numbers = append(numbers, 40)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Map<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>ages := map&#91;string]int{\n    \"Alice\": 30,\n    \"Bob\":   40,\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>string -&gt; int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lookup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age := ages&#91;\"Alice\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Safe lookup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age, exists := ages&#91;\"Alice\"]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Struct<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>type User struct {\n    Name string\n    Age  int\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user := User{\n    Name: \"Alice\",\n    Age:  30,\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Access:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fmt.Println(user.Name)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Final Mental Model<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The easiest way to remember everything is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ARRAY\n\"I need exactly N values.\"\n\n&#91;3]int\n   \u2193\n&#91;10, 20, 30]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>SLICE\n\"I need a flexible list.\"\n\n&#91;]int\n  \u2193\n&#91;10, 20, 30, ...]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>MAP\n\"I want to find a value using a key.\"\n\nmap&#91;string]int\n\nAlice ----&gt; 30\nBob   ----&gt; 40\nJohn  ----&gt; 25<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>STRUCT\n\"I want to describe one thing.\"\n\nUser\n |\n +-- Name\n +-- Age\n +-- Email\n +-- Active<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And in a typical Go application, these often become:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Struct = defines ONE object\n\n          \u2193\n\ntype User struct {\n    ID   int\n    Name string\n}\n\n          \u2193\n\nSlice = stores MANY objects\n\n&#91;]User\n\n          \u2193\n\nMap = quickly FINDS objects\n\nmap&#91;int]User<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So a particularly useful rule to remember is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Struct = one thing. Slice = many things. Map = find things by key. Array = fixed number of things.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>These four concepts are fundamental Go data structures. A simple way to remember them: 1. Arrays What is an Array? An array stores multiple values of the&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1073","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1073"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1073\/revisions"}],"predecessor-version":[{"id":1075,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1073\/revisions\/1075"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}