<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Procedural on avni.sh</title>
    <link>http://www.avni.sh/tags/procedural/</link>
    <description>Recent content in Procedural on avni.sh</description>
    <image>
      <title>avni.sh</title>
      <url>http://www.avni.sh/cover.webp</url>
      <link>http://www.avni.sh/cover.webp</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 21 Jun 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://www.avni.sh/tags/procedural/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Go Programming Language</title>
      <link>http://www.avni.sh/posts/go/go-programming-language/</link>
      <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
      <guid>http://www.avni.sh/posts/go/go-programming-language/</guid>
      <description>Go is used to build applications for cloud, network services, and web development.</description>
      <content:encoded><![CDATA[<p>Go is a compiled language developed by Robert Griesemer, Rob Pike, and Ken Thompson at Google. It is primarily used in cloud-native and web development projects.</p>
<p>Some of the popular projects created with Go</p>
<ul>
<li>Docker: Container Engine</li>
<li>Kubernetes: Container Orchestrator</li>
<li>Hugo: Static Site Generator (Also used to generate this blog)</li>
<li><a href="/posts/computer-science/technologies/cloud-native/helm-charts" target="_blank">Helm</a>: Package manager for Kubernetes</li>
</ul>
<h1 id="packages">Packages</h1>
<p>A <strong>Package</strong> abstraction is created in Go to group functions that are related to each other or associated with a specific task. At the start of each source file (<code>*.go</code>) a package name is assigned to it using the <code>package</code> keyword, for example, <code>package main</code>.</p>
<p>To import a package we use the <code>import</code> keyword with the name of the package enclosed in <code>&quot;&quot;</code> like <code>import &quot;fmt&quot;</code>. The constants, functions, and variables imported from a package are referred to with their first letter capitalized like <code>math.Pi</code> and <code>math.Pow()</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Packages could be bundled together as <strong>modules</strong>. The <code>go.mod</code> file declares the path to a Go module and all packages within it. A Go module is initialized using the <code>go mod init</code> command followed by the name of the module</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">go mod init exampleModule
</span></span></code></pre></div><p>This will generate a <code>go.mod</code> file in the directory specifying the name of the module (<code>exampleModule</code>) and its dependencies.</p>
<h1 id="standard-input-and-output">Standard Input and Output</h1>
<p>The <code>fmt</code> package provides functions for standard input and output,  these help return output from the program and take inputs from the user respectively. The <code>fmt.Println()</code> function outputs its arguments to the terminal and <code>fmt.Scanln()</code> takes input from the terminal and assigns them to variables. Variations of <code>Println</code> and <code>Scanln</code> provided by <code>fmt</code>:</p>
<ul>
<li><code>fmt.Print()</code>: Standard output without any newline at the end.</li>
<li><code>fmt.Scan()</code>: Values are read from standard input and the newline is interpreted as space.</li>
<li><code>fmt.Printf()</code>: Standard output in the specified format.</li>
<li><code>fmt.Scanf()</code>: Reads the value from the terminal in the specified format.</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;Your name:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Hello&#34;</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Your name: Joe</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Hello Joe</span>
</span></span></code></pre></div><h1 id="building-and-executing">Building and Executing</h1>
<p>To compile and build a Go package as a binary we use the <code>go build</code> command.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">go build hello.go
</span></span></code></pre></div><p>This will create a binary named <code>hello</code> (or <code>hello.exe</code> in Windows) in the current directory that could be executed directly by the host OS.</p>
<p>We can execute a Go package directly from the source file using the <code>go run</code> command.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">go run hello.go
</span></span></code></pre></div><h1 id="constants">Constants</h1>
<p><code>const</code> keyword is used to define constants, values that don&rsquo;t have to be changed throughout the program. Go supports numeric, character, string, and boolean constants.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kd">const</span> <span class="nx">pi</span> <span class="p">=</span> <span class="mf">3.14</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Approximate value of Pi is:&#34;</span><span class="p">,</span> <span class="nx">pi</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Approximate value of Pi is: 3.14</span>
</span></span></code></pre></div><h1 id="variables-and-datatypes">Variables and Datatypes</h1>
<p>To initialize a variable in Go we have to use the <code>var</code> keyword followed by the name of the variable and its datatype like <code>var intExample int</code>.</p>
<p>Go has the following datatypes</p>
<ul>
<li><code>bool</code> for boolean values. Either <code>true</code> or <code>false</code>.</li>
<li><code>string</code> for storing single or multiple characters.</li>
<li><code>rune</code> for storing the Unicode code point of a character.</li>
<li><code>int</code> for integers. Go also supports <code>int8</code>, <code>int16</code>, <code>int32</code>, and <code>int64</code> where the digits after <code>int</code> signifies the number of bits required to represent the value.</li>
<li><code>uint</code> for unsigned integers (integers without + or -). <code>uint8</code>/<code>byte</code>, <code>uint16</code>, <code>uint32</code>, <code>uint64</code> are also available in Go.</li>
<li>Variables of the <code>uintptr</code> type are used to store integer representations of memory addresses. They are useful for performing pointer arithmetic provided by <code>unsafe.Pointer</code>.</li>
<li><code>float32</code> and <code>float64</code> for values that require decimal precision.</li>
<li><code>complex64</code> and <code>complex128</code> are used to represent 64 and 128-bit complex numbers like $5\ +\ i6$ (where $i$ represents $\sqrt{(-1)}$)</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">intExample</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">        <span class="nx">intExample</span> <span class="p">=</span> <span class="mi">3</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Integer Example:&#34;</span><span class="p">,</span> <span class="nx">intExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">floatExample</span> <span class="kt">float64</span>
</span></span><span class="line"><span class="cl">        <span class="nx">floatExample</span> <span class="p">=</span> <span class="mf">2.3</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Float Example:&#34;</span><span class="p">,</span> <span class="nx">floatExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">stringExample</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">        <span class="nx">stringExample</span> <span class="p">=</span> <span class="s">&#34;Hello, World&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;String Example:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">boolExample</span> <span class="kt">bool</span>
</span></span><span class="line"><span class="cl">        <span class="nx">boolExample</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Boolean Example:&#34;</span><span class="p">,</span> <span class="nx">boolExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="kd">var</span> <span class="nx">complexExample</span> <span class="kt">complex64</span>
</span></span><span class="line"><span class="cl">        <span class="nx">complexExample</span> <span class="p">=</span> <span class="nb">complex</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Complex Number Example:&#34;</span><span class="p">,</span> <span class="nx">complexExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Integer Example: 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Float Example: 2.3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// String Example: Hello, World</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Boolean Example: true</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Complex Number Example: (5+6i)</span>
</span></span></code></pre></div><p>To declare and assign values to a variable without explicitly specifying its datatype we use <code>:=</code> operand, the variable&rsquo;s datatype will be inferred during compile time by the value on the right side of the operand.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">intExample</span> <span class="o">:=</span> <span class="mi">3</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Integer Example:&#34;</span><span class="p">,</span> <span class="nx">intExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">floatExample</span> <span class="o">:=</span> <span class="mf">2.3</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Float Example:&#34;</span><span class="p">,</span> <span class="nx">floatExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">stringExample</span> <span class="o">:=</span> <span class="s">&#34;Hello, World&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;String Example:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">boolExample</span> <span class="o">:=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Boolean Example:&#34;</span><span class="p">,</span> <span class="nx">boolExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">complexExample</span> <span class="o">:=</span> <span class="nb">complex</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Complex Number Example:&#34;</span><span class="p">,</span> <span class="nx">complexExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Integer Example: 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Float Example: 2.3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// String Example: Hello, World</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Boolean Example: true</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Complex Number Example: (5+6i)</span>
</span></span></code></pre></div><p>If a variable is initialized without any value then a <em>zero</em> value will be assigned to it by default. Zero values for different datatypes are <code>0</code> (for <code>int</code>), <code>0.0</code> (for <code>float64</code>), <code>&quot;&quot;</code> (for <code>string</code>), and <code>false</code> (for <code>bool</code>).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">example1</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">example1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">example2</span> <span class="kt">float64</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">example2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">example3</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">example3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">example4</span> <span class="kt">bool</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">example4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// </span>
</span></span><span class="line"><span class="cl"><span class="c1">// false</span>
</span></span></code></pre></div><h1 id="type-conversion">Type Conversion</h1>
<p>Datatypes could also be used as functions for type conversion of variables for example <code>float64(intExample)</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">intExample</span> <span class="o">:=</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Float conversion of intExample: %0.2f&#34;</span><span class="p">,</span> <span class="nb">float64</span><span class="p">(</span><span class="nx">intExample</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Float conversion of intExample: 4.00</span>
</span></span></code></pre></div><h1 id="functions">Functions</h1>
<p><strong>Functions</strong> allow us to aggregate frequently used instructions as a single statement. To define a function in Go we use the <code>func</code> keyword followed by the name of the function, its arguments (inputs), and the datatype of the return values like <code>func exampleFunc (inputValue int) (outputValue int) { }</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">square</span> <span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nx">x</span><span class="o">*</span><span class="nx">x</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">sumAndDifference</span> <span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nx">x</span><span class="o">+</span><span class="nx">y</span><span class="p">,</span> <span class="nx">x</span><span class="o">-</span><span class="nx">y</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">value1</span> <span class="o">:=</span> <span class="mi">5</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Square of&#34;</span><span class="p">,</span> <span class="nx">value1</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nf">square</span><span class="p">(</span><span class="nx">value1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="nx">value2</span> <span class="o">:=</span> <span class="mi">8</span>
</span></span><span class="line"><span class="cl">        <span class="nx">sum</span><span class="p">,</span> <span class="nx">difference</span> <span class="o">:=</span> <span class="nf">sumAndDifference</span><span class="p">(</span><span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Sum of&#34;</span><span class="p">,</span> <span class="nx">value1</span><span class="p">,</span> <span class="s">&#34;and&#34;</span><span class="p">,</span> <span class="nx">value2</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nx">sum</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Difference of&#34;</span><span class="p">,</span> <span class="nx">value2</span><span class="p">,</span> <span class="s">&#34;from&#34;</span><span class="p">,</span> <span class="nx">value1</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nx">difference</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Square of 5 is: 25</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Sum of 5 and 8 is: 13</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Difference of 8 from 5 is: -3</span>
</span></span></code></pre></div><h2 id="anonymous-functions">Anonymous Functions</h2>
<p>Functions are first-class citizens in Go i.e. they could be defined inside variables, passed as arguments, and returned as values from other functions.</p>
<p>Functions with no name (called <strong>Anonymous functions</strong>) could be created to perform a set of instructions once in a program.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// Anonymous Function</span>
</span></span><span class="line"><span class="cl">	<span class="kd">func</span> <span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Hello, this is not a random number:&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// Function as Variable</span>
</span></span><span class="line"><span class="cl">	<span class="nx">funcExample</span> <span class="o">:=</span> <span class="kd">func</span> <span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example Function&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Input:&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nf">funcExample</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Hello, this is not a random number: 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example Function</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Input: 3</span>
</span></span></code></pre></div><h1 id="conditions">Conditions</h1>
<p>Go supports <code>if</code>, <code>else if</code>,  and <code>else</code> for defining conditional statements.<code>&amp;&amp;</code> (AND) and <code>||</code> (OR) operators could be used to create complex conditional expressions.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">evaluateGrades</span> <span class="p">(</span><span class="nx">marks</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">string</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nx">marks</span> <span class="p">&lt;</span> <span class="mi">101</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    	<span class="k">if</span> <span class="nx">marks</span> <span class="p">&lt;</span> <span class="mi">40</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    		<span class="k">return</span> <span class="s">&#34;D&#34;</span>
</span></span><span class="line"><span class="cl">    	<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">marks</span> <span class="o">&gt;=</span> <span class="mi">40</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    		<span class="k">return</span> <span class="s">&#34;C&#34;</span>
</span></span><span class="line"><span class="cl">    	<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">marks</span> <span class="o">&gt;=</span> <span class="mi">50</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    		<span class="k">return</span> <span class="s">&#34;B&#34;</span>
</span></span><span class="line"><span class="cl">    	<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">marks</span> <span class="o">&gt;=</span> <span class="mi">60</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">    		<span class="k">return</span> <span class="s">&#34;A&#34;</span>
</span></span><span class="line"><span class="cl">    	<span class="p">}</span> 
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="s">&#34;INVALID&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">marks</span> <span class="o">:=</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Grade for marks:&#34;</span><span class="p">,</span> <span class="nx">marks</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nf">evaluateGrades</span><span class="p">(</span><span class="nx">marks</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="nx">marks</span> <span class="p">=</span> <span class="mi">40</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Grade for marks:&#34;</span><span class="p">,</span> <span class="nx">marks</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nf">evaluateGrades</span><span class="p">(</span><span class="nx">marks</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">marks</span> <span class="p">=</span> <span class="mi">51</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Grade for marks:&#34;</span><span class="p">,</span> <span class="nx">marks</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nf">evaluateGrades</span><span class="p">(</span><span class="nx">marks</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">marks</span> <span class="p">=</span> <span class="mi">101</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Grade for marks:&#34;</span><span class="p">,</span> <span class="nx">marks</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nf">evaluateGrades</span><span class="p">(</span><span class="nx">marks</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Grade for marks: 4 is: D</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Grade for marks: 40 is: C</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Grade for marks: 51 is: C</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Grade for marks: 101 is: INVALID</span>
</span></span></code></pre></div><h1 id="switch-cases">Switch Cases</h1>
<p>Sometimes a <code>switch</code> could be relatively clean compared to multiple <code>if</code> and <code>else if</code> statements.</p>
<p>Unlike <code>if-else</code> the first <code>case</code> which satisfies the condition will be executed and the following cases will be ignored. If none of the <code>case</code> conditions are satisfied then the <code>default</code> statement is executed.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">evaluate</span> <span class="p">(</span><span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span><span class="p">,</span> <span class="nx">operation</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">switch</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">case</span> <span class="nx">operation</span><span class="o">==</span><span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="nx">value1</span><span class="o">+</span><span class="nx">value2</span>
</span></span><span class="line"><span class="cl">        <span class="k">case</span> <span class="nx">operation</span><span class="o">==</span><span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="nx">value1</span><span class="o">-</span><span class="nx">value2</span>
</span></span><span class="line"><span class="cl">        <span class="k">case</span> <span class="nx">operation</span><span class="o">==</span><span class="mi">3</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="nx">value1</span><span class="o">*</span><span class="nx">value2</span>
</span></span><span class="line"><span class="cl">        <span class="k">case</span> <span class="nx">operation</span><span class="o">==</span><span class="mi">4</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="nx">value1</span><span class="o">/</span><span class="nx">value2</span>
</span></span><span class="line"><span class="cl">        <span class="k">default</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span><span class="p">,</span> <span class="nx">operation</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Calculator Program:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;Enter value1:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">value1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;Enter value2:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">value2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;\nSelect Operation to Perform&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;1) ADD&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;2) SUBTRACT&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;3) MULTIPLY&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;4) DIVIDE&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;Enter the operation number:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">operation</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Result of Operation is:&#34;</span><span class="p">,</span> <span class="nf">evaluate</span><span class="p">(</span><span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span><span class="p">,</span> <span class="nx">operation</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Calculator Program:</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter value1:56</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter value2:54</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Select Operation to Perform</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 1) ADD</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 2) SUBTRACT</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 3) MULTIPLY</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 4) DIVIDE</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter the operation number:3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Result of Operation is: 3024</span>
</span></span></code></pre></div><h1 id="additional-datatypes">Additional Datatypes</h1>
<h2 id="arrays">Arrays</h2>
<p>We create <strong>arrays</strong> to store a sequence of values with the same datatype. Go arrays have explicitly defined sizes associated with their datatype.</p>
<p>Individual elements in an array could be accessed by their index (starting from <code>0</code>). For example, to access the 3rd element in the <code>array</code> we can simply call <code>array[2]</code>.</p>
<p>An array is defined as <code>array := [5]int{2, 4, 8, 16, 32}</code>. <code>len()</code> function returns the length of the array.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">arrayExample</span> <span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Zero Value Array:&#34;</span><span class="p">,</span> <span class="nx">arrayExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">arrayExample</span><span class="p">[</span><span class="mi">1</span><span class="p">]=</span><span class="mi">2</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Changed arrayExample:&#34;</span><span class="p">,</span> <span class="nx">arrayExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">arrayExample2</span> <span class="o">:=</span> <span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">21</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Another arrayExample:&#34;</span><span class="p">,</span> <span class="nx">arrayExample2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Zero Value Array: [0 0 0 0 0]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Changed arrayExample: [0 2 0 0 0]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Another arrayExample: [2 3 1 3 21]</span>
</span></span></code></pre></div><h2 id="slices">Slices</h2>
<p>A segment of an array could be extracted by creating its <strong>slice</strong>. To extract a segment starting from index <code>2</code> till index <code>5</code> in an array called <code>arrayExample</code> we can simply write <code>arrayExample[2:5]</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">arrayExample2</span> <span class="o">:=</span> <span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">234</span><span class="p">,</span> <span class="mi">23</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">lowIndex</span> <span class="o">:=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">    <span class="nx">highIndex</span> <span class="o">:=</span> <span class="mi">5</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Slice of arrayExample starting from index&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">lowIndex</span><span class="p">,</span> <span class="s">&#34;to&#34;</span><span class="p">,</span> <span class="nx">highIndex</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">arrayExample2</span><span class="p">[</span><span class="nx">lowIndex</span><span class="p">:</span><span class="nx">highIndex</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Slice of arrayExample starting from index&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">lowIndex</span><span class="p">,</span> <span class="s">&#34;till (including)&#34;</span><span class="p">,</span> <span class="nx">highIndex</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">arrayExample2</span><span class="p">[</span><span class="nx">lowIndex</span><span class="p">:</span><span class="nx">highIndex</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Slice Length:&#34;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">arrayExample2</span><span class="p">[</span><span class="nx">lowIndex</span><span class="p">:</span><span class="nx">highIndex</span><span class="o">+</span><span class="mi">1</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Capacity of the original array:&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nb">cap</span><span class="p">(</span><span class="nx">arrayExample2</span><span class="p">[</span><span class="nx">lowIndex</span><span class="p">:</span><span class="nx">highIndex</span><span class="o">+</span><span class="mi">1</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Slice of arrayExample starting from index 2 to 5 is: [1 3 21]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Slice of arrayExample starting from index 2 till (including) 5 is: [1 3 21 234]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Slice Length: 4</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Capacity of the original array: 5</span>
</span></span></code></pre></div><p>Any changes performed on the slice will also affect the original array.</p>
<p>The <code>cap()</code> function is used to return the capacity of the original array.</p>
<p>The length of the slice is not part of its datatype, so slices are also used as dynamically-sized arrays. A slice is created just like an array but without any size in its declaration like <code>var sliceExample []int</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">capitals</span> <span class="p">[]</span><span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">capitals</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">capitals</span><span class="p">,</span> <span class="s">&#34;delhi&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">capitals</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">capitals</span><span class="p">,</span> <span class="s">&#34;london&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Slice of Capitals:&#34;</span><span class="p">,</span> <span class="nx">capitals</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Length of Capitals Slice:&#34;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">capitals</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Capacity of Capitals Slice:&#34;</span><span class="p">,</span> <span class="nb">cap</span><span class="p">(</span><span class="nx">capitals</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Slice of Capitals: [delhi london]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Length of Capitals Slice: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Capacity of Capitals Slice: 2</span>
</span></span></code></pre></div><h2 id="maps">Maps</h2>
<p>To store key-value pairs in Go we have <strong>Maps</strong>. We can define a map that stores <code>string</code> keys mapped to <code>bool</code> values with the help of <code>make()</code> function like <code>mapExample := make(map[string]bool)</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">bool</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span><span class="p">[</span><span class="s">&#34;yes&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span><span class="p">[</span><span class="s">&#34;no&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of Map:&#34;</span><span class="p">,</span> <span class="nx">mapExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of Map: map[no:false yes:true]</span>
</span></span></code></pre></div><h2 id="structs">Structs</h2>
<p>Go is a procedural language but to create data structures with multiple fields we have <code>struct</code>. By creating a <code>struct</code> we are adding a new datatype to our program, that&rsquo;s why the <code>type</code> keyword is used in its declaration.</p>
<p>While creating an instance of the <code>struct</code> we can pass the value to its fields like maps where the key is the name of the field.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">dog</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">age</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">dog1</span> <span class="o">:=</span> <span class="nx">dog</span><span class="p">{</span><span class="nx">name</span><span class="p">:</span> <span class="s">&#34;DoggyMcDogFace&#34;</span><span class="p">,</span> <span class="nx">age</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Dog1:&#34;</span><span class="p">,</span> <span class="nx">dog1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">dog2</span> <span class="o">:=</span> <span class="nx">dog</span><span class="p">{</span><span class="nx">name</span><span class="p">:</span> <span class="s">&#34;AnotherDog&#34;</span><span class="p">,</span> <span class="nx">age</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Dog2:&#34;</span><span class="p">,</span> <span class="nx">dog2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Dog1: {DoggyMcDogFace 1}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Dog2: {AnotherDog 3}</span>
</span></span></code></pre></div><h1 id="methods">Methods</h1>
<p><strong>Methods</strong> refer to the functions created to be executed on a specific datatype (like a <code>struct</code>). Their declaration is similar to functions with the addition of <code>struct</code> argument after <code>func</code> keyword like <code>func (d dog) showFields() () { }</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">dog</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">age</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">d</span> <span class="nx">dog</span><span class="p">)</span> <span class="nf">showFields</span><span class="p">()</span> <span class="p">(){</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Name of Dog:&#34;</span><span class="p">,</span> <span class="nx">d</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Age of Dog:&#34;</span><span class="p">,</span> <span class="nx">d</span><span class="p">.</span><span class="nx">age</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">dog1</span> <span class="o">:=</span> <span class="nx">dog</span><span class="p">{</span><span class="nx">name</span><span class="p">:</span> <span class="s">&#34;DoggyMcDogFace&#34;</span><span class="p">,</span> <span class="nx">age</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">dog1</span><span class="p">.</span><span class="nf">showFields</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">dog2</span> <span class="o">:=</span> <span class="nx">dog</span><span class="p">{</span><span class="nx">name</span><span class="p">:</span> <span class="s">&#34;AnotherDog&#34;</span><span class="p">,</span> <span class="nx">age</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">dog2</span><span class="p">.</span><span class="nf">showFields</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Name of Dog: DoggyMcDogFace</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Age of Dog: 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Name of Dog: AnotherDog</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Age of Dog: 3</span>
</span></span></code></pre></div><h2 id="interfaces">Interfaces</h2>
<p><strong>Interfaces</strong> are used to group common methods.</p>
<p>Interfaces enable polymorphism in Go, which means a method&rsquo;s behavior is determined by the datatype it is applied upon.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">ubuntu</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">releaseName</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">releaseVersion</span> <span class="kt">float64</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">u</span> <span class="nx">ubuntu</span><span class="p">)</span> <span class="nf">showUpdateCommand</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Update command for&#34;</span><span class="p">,</span> <span class="nx">u</span><span class="p">.</span><span class="nx">releaseName</span><span class="p">,</span> <span class="s">&#34;is&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;\tapt-get update &amp;&amp; apt-get upgrade&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">fedora</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">releaseName</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">releaseVersion</span> <span class="kt">float64</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">f</span> <span class="nx">fedora</span><span class="p">)</span> <span class="nf">showUpdateCommand</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Update command for&#34;</span><span class="p">,</span> <span class="nx">f</span><span class="p">.</span><span class="nx">releaseName</span><span class="p">,</span> <span class="s">&#34;is&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;\tdnf update&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">distro</span> <span class="kd">interface</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nf">showUpdateCommand</span><span class="p">()</span>    
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">exampleDistro</span><span class="p">,</span> <span class="nx">exampleDistro2</span> <span class="nx">distro</span>
</span></span><span class="line"><span class="cl">    <span class="nx">exampleDistro</span> <span class="p">=</span> <span class="nx">ubuntu</span><span class="p">{</span><span class="nx">releaseName</span><span class="p">:</span> <span class="s">&#34;Lunar Lobster&#34;</span><span class="p">,</span> <span class="nx">releaseVersion</span><span class="p">:</span> <span class="mf">23.04</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of a distro:&#34;</span><span class="p">,</span> <span class="nx">exampleDistro</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">exampleDistro</span><span class="p">.</span><span class="nf">showUpdateCommand</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">exampleDistro2</span> <span class="p">=</span> <span class="nx">fedora</span><span class="p">{</span><span class="nx">releaseName</span><span class="p">:</span> <span class="s">&#34;Fedora 39&#34;</span><span class="p">,</span> <span class="nx">releaseVersion</span><span class="p">:</span> <span class="mf">39.00</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of another distro:&#34;</span><span class="p">,</span> <span class="nx">exampleDistro2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">exampleDistro2</span><span class="p">.</span><span class="nf">showUpdateCommand</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of a distro: {Lunar Lobster 23.04}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Update command for Lunar Lobster is</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 	 apt-get update &amp;&amp; apt-get upgrade</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of another distro: {Fedora 39 39}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Update command for Fedora 39 is</span>
</span></span><span class="line"><span class="cl"><span class="c1">//	  dnf update</span>
</span></span></code></pre></div><h1 id="for-loops">For Loops</h1>
<p>Loops allow us to execute a statement multiple times until some condition is valid.</p>
<p>A <code>for</code> loop requires three statements:</p>
<ul>
<li>initializing statement: This statement will be executed once before the loop has started.</li>
<li>conditional expression: This expression will be evaluated after each execution of the loop. The loop will stop if this expression evaluates to <code>false</code>.</li>
<li>incrementing statement: This statement is executed after each iteration of the loop</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Initializing Statement: i:=0 (i is initialized with value 0)</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Conditional Expression: i&lt;10 (until i is less than 10)</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Incrementing Statement: i++  (increment i by 1)</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span> <span class="nx">i</span><span class="p">&lt;</span><span class="mi">10</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value of i:&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 4</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 5</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 6</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 7</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 8</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of i: 9</span>
</span></span></code></pre></div><h2 id="for-loop-over-an-array">For Loop over an Array</h2>
<p><code>len(array)</code> will return the length of an array, by using its length we can calculate the last index of an array i.e. <code>len(array)-1</code>. This will help us write a loop that accesses each element of an array using its index.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">arrayExample</span> <span class="o">:=</span> <span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">123</span><span class="p">,</span> <span class="mi">21</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">54</span><span class="p">,</span> <span class="mi">65</span><span class="p">,</span> <span class="mi">45</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span> <span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">arrayExample</span><span class="p">);</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Element at index &#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="s">&#34;in arrayExample is&#34;</span><span class="p">,</span> <span class="nx">arrayExample</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  0 in arrayExample is 123</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  1 in arrayExample is 21</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  2 in arrayExample is 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  3 in arrayExample is 54</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  4 in arrayExample is 65</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index  5 in arrayExample is 45</span>
</span></span></code></pre></div><h2 id="range">Range</h2>
<p>To iterate over data structures such as slices, maps, and strings we can take the help of <code>range</code>. Each iteration of a loop implemented with <code>range</code> will return two values depending on the data structure passed to it:</p>
<ul>
<li>for string, it will return the byte position of the character and character</li>
<li>for array/slices, it will return the index and the element</li>
<li>for maps, it will return the key and value</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">sliceExample</span> <span class="p">[]</span><span class="kt">float64</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sliceExample</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">sliceExample</span><span class="p">,</span> <span class="mf">4.3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sliceExample</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">sliceExample</span><span class="p">,</span> <span class="mf">5.2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sliceExample</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">sliceExample</span><span class="p">,</span> <span class="mf">64.3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sliceExample</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">sliceExample</span><span class="p">,</span> <span class="mf">34.8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of a Slice:&#34;</span><span class="p">,</span> <span class="nx">sliceExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">sliceExample</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value at index&#34;</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="s">&#34;in sliceExample is&#34;</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">stringExample</span> <span class="o">:=</span> <span class="s">&#34;Hello, World&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of a String:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">pos</span><span class="p">,</span> <span class="nx">char</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">stringExample</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%#U character is at position %d\n&#34;</span><span class="p">,</span> <span class="nx">char</span><span class="p">,</span> <span class="nx">pos</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">int</span><span class="p">]</span><span class="kt">string</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;one&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;two&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">mapExample</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;four&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Example of a Map:&#34;</span><span class="p">,</span> <span class="nx">mapExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">value</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">mapExample</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value for key&#34;</span><span class="p">,</span> <span class="nx">key</span><span class="p">,</span> <span class="s">&#34;in mapExample is&#34;</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of a Slice: [4.3 5.2 64.3 34.8]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value at index 0 in sliceExample is 4.3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value at index 1 in sliceExample is 5.2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value at index 2 in sliceExample is 64.3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value at index 3 in sliceExample is 34.8</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of a String: Hello, World</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0048 &#39;H&#39; character is at position 0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0065 &#39;e&#39; character is at position 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+006C &#39;l&#39; character is at position 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+006C &#39;l&#39; character is at position 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+006F &#39;o&#39; character is at position 4</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+002C &#39;,&#39; character is at position 5</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0020 &#39; &#39; character is at position 6</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0057 &#39;W&#39; character is at position 7</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+006F &#39;o&#39; character is at position 8</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0072 &#39;r&#39; character is at position 9</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+006C &#39;l&#39; character is at position 10</span>
</span></span><span class="line"><span class="cl"><span class="c1">// U+0064 &#39;d&#39; character is at position 11</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Example of a Map: map[1:one 2:two 4:four]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value for key 1 in mapExample is one</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value for key 2 in mapExample is two</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value for key 4 in mapExample is four</span>
</span></span></code></pre></div><h2 id="substitute-for-while-loop">Substitute for <code>while</code> Loop</h2>
<p>Go doesn&rsquo;t have <code>while</code> loops but we can use <code>for</code> loops for the same purpose by executing it with just the conditional expression.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Enter an odd number to end the loop&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">flag</span> <span class="o">:=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">flag</span><span class="o">==</span><span class="kc">false</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="kd">var</span> <span class="nx">input</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">            <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Enter a value:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">input</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="nx">input</span><span class="o">%</span><span class="mi">2</span><span class="o">!=</span><span class="mi">0</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nx">flag</span><span class="p">=</span><span class="kc">true</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Loop ended&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter an odd number to end the loop</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter a value:2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter a value:42</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter a value:52</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter a value:68</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter a value:69</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Loop ended</span>
</span></span></code></pre></div><h1 id="pointers">Pointers</h1>
<p>Pointers for a datatype will store the address of a value rather than the value itself. So an integer pointer (<code>*int</code>) will store the address of an integer value.</p>
<p>To fetch the address of a value we use <code>&amp;</code> operand. For example, to fetch the address of the value stored in the <code>intExample</code> variable we call <code>&amp;intExample</code>. Similarly to fetch the value stored at an address we use <code>*</code> operand like <code>*(&amp;intExample)</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">intExample</span> <span class="o">:=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value of intExample:&#34;</span><span class="p">,</span> <span class="nx">intExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Memory address of intExample:&#34;</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">intExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">pointerExample</span> <span class="o">*</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">    <span class="nx">pointerExample</span> <span class="p">=</span> <span class="o">&amp;</span><span class="nx">intExample</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value of pointerExample:&#34;</span><span class="p">,</span> <span class="nx">pointerExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Value stored at pointerExample address:&#34;</span><span class="p">,</span> <span class="o">*</span><span class="nx">pointerExample</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of intExample: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Memory address of intExample: 0xc000022050</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value of pointerExample: 0xc000022050</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Value stored at pointerExample address: 2</span>
</span></span></code></pre></div><p>When methods are defined on the pointer of the <code>struct</code> rather than the <code>struct</code> themselves then they can manipulate the value of fields in the original instance rather than its copy.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">car</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">color</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">c</span> <span class="nx">car</span><span class="p">)</span> <span class="nf">changeColor</span><span class="p">(</span><span class="nx">color</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">c</span><span class="p">.</span><span class="nx">color</span> <span class="p">=</span> <span class="nx">color</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">c</span> <span class="o">*</span><span class="nx">car</span><span class="p">)</span> <span class="nf">changeColorPointer</span><span class="p">(</span><span class="nx">color</span> <span class="kt">string</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">c</span><span class="p">.</span><span class="nx">color</span> <span class="p">=</span> <span class="nx">color</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">newCar</span> <span class="o">:=</span> <span class="nx">car</span><span class="p">{</span><span class="nx">color</span><span class="p">:</span> <span class="s">&#34;red&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;newCar: &#34;</span><span class="p">,</span> <span class="nx">newCar</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1">// This will not work as the change is not performed </span>
</span></span><span class="line"><span class="cl">    <span class="c1">// on the original memory address but on its copy</span>
</span></span><span class="line"><span class="cl">    <span class="nx">newCar</span><span class="p">.</span><span class="nf">changeColor</span><span class="p">(</span><span class="s">&#34;blue&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;newCar after changing color: &#34;</span><span class="p">,</span> <span class="nx">newCar</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">newCarPtr</span> <span class="o">*</span><span class="nx">car</span>
</span></span><span class="line"><span class="cl">    <span class="nx">newCarPtr</span> <span class="p">=</span> <span class="o">&amp;</span><span class="nx">newCar</span>
</span></span><span class="line"><span class="cl">    <span class="nx">newCarPtr</span><span class="p">.</span><span class="nf">changeColorPointer</span><span class="p">(</span><span class="s">&#34;blue&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;newCar after changing color using pointer: &#34;</span><span class="p">,</span> <span class="nx">newCar</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// newCar:  {red}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// newCar after changing color:  {red}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// newCar after changing color using pointer:  {blue}</span>
</span></span></code></pre></div><h1 id="errors">Errors</h1>
<p>In Go, errors are like other return types. So a function can return two values one being the output of the function and the other value could be an <code>error</code> interface. We can declare this in the function&rsquo;s signature like <code>func sampleFunc(value int) (int, error) { }</code>.</p>
<p>A custom error is created using <code>errors.New()</code> function is available in the <code>errors</code> package.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s">&#34;errors&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">divide</span><span class="p">(</span><span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nx">value2</span><span class="o">==</span><span class="mi">0</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;Divide by Zero Error. Change value2&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> 
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nx">value1</span><span class="o">/</span><span class="nx">value2</span><span class="p">,</span> <span class="kc">nil</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Enter value1:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">value1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Enter value2:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">value2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="nx">quotient</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nf">divide</span><span class="p">(</span><span class="nx">value1</span><span class="p">,</span> <span class="nx">value2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Quotient:&#34;</span><span class="p">,</span> <span class="nx">quotient</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nx">err</span><span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Error:&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter value1:1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Enter value2:0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// ERROR!</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Quotient: -1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Error: Divide by Zero Error. Change value2</span>
</span></span></code></pre></div><p>To catch an unexpected error and exit the program we call the <code>panic()</code> function with a string or the error as its argument. If we don&rsquo;t want the program to abort on <code>panic()</code> we can follow it up with a <code>recover()</code> function.</p>
<h1 id="resources">Resources</h1>
<p><a href="https://gobyexample.com/" target="_blank">Go by Example</a><br>
<a href="https://www.youtube.com/watch?v=C8LgvuEBraI" target="_blank">Learn Go in 12 Minutes</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
