References

Introduction

Some random notes I took when following the basic golang tutorial from Boot.dev

Here is a basic “Hello World” program in Go,

package main
 
import "fmt"
 
func main() {
    fmt.Println("Hello World")
}

Going to skip mentioning the package and import moving forward - unless it’s something new. Here is how to declare variables,

func main() {
    // variable initialization
    var smsSendingLimit int
    var costPerSMS float64
    var hasPermission bool
    var username string
    
    fmt.Printf("%v %.2f %v %q\n", smsSendingLimit, costPerSMS, hasPermission, username)
}

The output of the above looks like this,

0 0.00 false ""

I find the %v working for both int and bool weird. Like - if we’re going to reuse characters, why not the same for all? And why %q for strings? That’s new. Why not the usual %s ?

The earlier seems to be the “sad” way of declaring variables. The better approach seems to be this,

mySkillIssues := 42

The walrus operator declares the variable and assigns it a value at the same time. The language uses type inference to puzzle it out.

Oh. When the println() method is called like this,

fmt.println(messageStart, age, messageEnd)

in the output, a space is automatically inserted between the characters. That’s convenient!

Got some explanations about the boilerplate.

package main lets the compiler know that we want the code to compile and run as a standalone application. The alternative is that we might have been building a library.

import "fmt" imports fmt from the standard library.

func main() defines the entrypoint.

Here is an interest website/dictionary; https://techterms.com/definition/truncate

In Go, when we convert between types - float to int specifically, we lose data. The variable is not rounded - it is truncated.

Hmm… now that I think about it, I don’t feel I’ve actually done that kind of conversion in any of my day jobs. 🤔

Here is a list of default go types,

bool
string
int
uint
byte
rune
float64
complex128

What the heck is a rune type? A bit of searching tells me that it is a unicode codepoint. Usually it is equivalent to int32.

Constants are declared using the const keyword.

Finally got an answer. The %v that is used in fmt.Printf() is a default. It can be used for any variable.

fmt.Printf() will print a formatted string to STDOUT and fmt.Sprintf() will return the formatted string (it does not do any printing directly)

Here is a new way of using the import keyword,

import (
    "fmt"
    "unicode/utf8"
)

random website = https://emojipedia.org/bear

To measure unicode characters in Go, we need to use this,

const name = "🐻"
utf8.RuneCountInString(name)

above will return 1. But if you use len(name), it will return 4.

Just finished the variables section. That was a lot more than I was expecting!