DEV Community

Cover image for 30 Days of Go: Day 1
Kacha
Kacha

Posted on Edited on Originally published at kachamukabe.com

30 Days of Go: Day 1

Introduction

I have decided to take part in a challenge to learn Golang in the next 30 days. I found a Go hackathon and thought this is the perfect opportunity because I have wanted to learn it for a while now. I have decided to split this learning up in a couple of ways. The idea is to build an application for the hackathon. My current app idea is a citizen science API. This API will allow users to upload photos of animals such as birds or insects.

I have split my learnings into the following categories:

  • Weeks 1 & 2: Learn the syntax and basics of Golang and do the gophercises
  • Week 3 & 4: Build out the API

Golang syntax

This information is referenced Golang documentation and especially Go by example.

Variables

  • Golang's variables are explicitly declared like C#, Java
  • Golang allows multiple variables to be declared in one line
  • If the type has not been specified go will infer the types from initialized values
var a = "Hello world"
var age int = 8
// When the type has been declared it is used for both variables
var name, game string = "Scott Pilgrim", "vs The world"
// This is allowed because go will infer the types from initialization
var name, age = "Knives Chau", 18
Enter fullscreen mode Exit fullscreen mode
  • Variables that are declared but not initialized will be zero-valued
  • All declared but not initialized variables must have a type
var one int
// one = 0
var decision bool
// decision = false
var word string
// word = ''
Enter fullscreen mode Exit fullscreen mode
  • := is shorthand for declaring and initializing a variable e.g
num := 50
Enter fullscreen mode Exit fullscreen mode

Constants

  • Constants in Go work the same as in other languages. A const can be a string, character, bool, or numerical type.
const test string = "Steven Stills"
Enter fullscreen mode Exit fullscreen mode
  • Numerical constants perform arithmetic with arbitrary precision
  • A numerical constant has no type until it is given one from a function or is cast to a type

Flow Control

Loops

  • Go only has for loops and they can be initialized in the following ways:
i := 0
for i <= 4 {
    fmt.Println(i)
    i = i + 1
}

for j := 4; j <=8; j++ {
    fmt.Println(j)
}
Enter fullscreen mode Exit fullscreen mode
  • infinite loops have no conditions and can be stopped with a break statement
for {
    fmt.Println("The infinite sadness")
    break
}
Enter fullscreen mode Exit fullscreen mode
  • the continue keyword can be used to go to the next iteration of a loop
for i :=3; i <= 33; i++ {
    if i % 3 == 0 {
 continue
    }
    fmt.Println("Love evans")
}
Enter fullscreen mode Exit fullscreen mode

If else

  • If else blocks are like most other programming languages
  • Parenthesis are not needed in the if statement but braces are
if x == 3 {
    fmt.Println("Young Neil")
} else if x > 5 {
    fmt.Println("Neil")
} else {
    fmt.Println("Meh")
}
Enter fullscreen mode Exit fullscreen mode
  • Go's if block can have a statement before the condition. Any variable declared in the statement can be used in all the branches of the if block.
if x := 4; x < 0 {
    fmt.Println(x)
} else if x > 1 {
    fmt.Println("True")
} else {
    fmt.Println("Do something else")
}
Enter fullscreen mode Exit fullscreen mode
  • Go has no ternary if statements like javascript x == 2? "Yes": "No"

Switch statements

  • A switch statement in Go is like other programming languages
  • The default case is optional
  • Cases can have multiple expressions
  • a switch can have no expressions which will make it function like an if statement
switch i {
case 1:
    fmt.Println("One")
case 2:
    fmt.Println("Two")
case 3, 4, 5:
    fmt.Println("Others")
default:
    fmt.Println("Default is optional")
}

// Swtich with no condition
t := 5
switch {
case t < 4:
    fmt.Println("Less than 4")
default:
    fmt.Println("Else")
}
Enter fullscreen mode Exit fullscreen mode
  • A type switch compares types instead of values
  • Use this switch to discover an interface's type
  • Using .(type) does not work outside a type switch
myType := func(i interface{}){
    switch t := i.(type){
    case bool:
 fmt.Println("Im boolean")
    case int:
 fmt.Println("Im integer")
    default:
 fmt.Println("Im anything else")
    }
}
Enter fullscreen mode Exit fullscreen mode

This was a fruitful first day and there's more to come.

Top comments (9)

Collapse
 
supportic profile image
Supportic •

The .(type) assumption check is very useful but yet too early to stumble upon when you just started imo. :D
What you will also see alot is giving back a result + err from a function.
result, err := function(x,y) and in addition to that the often used err != nil check

if err != nil {
  fmt.Println("oops something went wrong")
}
Enter fullscreen mode Exit fullscreen mode

I would take a look on go project structure or code style guide best practises.

Welcome to GO :)

Collapse
 
kmukabe profile image
Kacha •

Thanks for that feedback @supportic, I was having trouble seeing how I'd use the type switch at this point. I'll keep it on the back burner for now, I'm planning to take a look at function syntax and data structures today so thanks for the links.

Thanks for the welcome as well glad to be here 😁

Collapse
 
supportic profile image
Supportic •

Pretend using the universal any type interface{} in a function parameter. Say you work with JSON values and you want to get the type of them in order to process them properly.
A type switch may help you because you know the structure/types you get and therefore can safely assume which types you get. (see type switch )
In the example you also see a very handy print function.
fmt.Printf("%v\n", res) eventually you know the printf function from C/C++. However the %v let's you print any type you want. Additionally with classes you might want to use %+v to also see the properties.

Thread Thread
 
kmukabe profile image
Kacha •

Ahhh interesting, I see this is quite helpful. I'll need to use this in a little toy app to really cement the concept

Collapse
 
clavinjune profile image
Clavin June •

don't forget, Go has fallthrough keyword in switch statement

Collapse
 
kmukabe profile image
Kacha •

I'll update the post to add this in there

Collapse
 
mrtung profile image
Mr Tùng •

Thx

Collapse
 
jainsakshi profile image
Sakshi J •

Hi! I am also taking part in same hackathon and learning flutter and go. Hope we'll have fun in learning journey...

Collapse
 
kmukabe profile image
Kacha •

Hi @bellatrix glad to have another hackathon lover here. How's your go journey um going 😅?