Hello readers, in this episode we’re going to talk about languages structures, as a preface to future post where I will show you all this stuff in action, with OOP and concurrency examples and reviewing some toolkits and frameworks.
Of course, this is not an exception, on each topic of this post I will show you an example of how it can be used and a comparison with languages to make it easy to understand for those whom come from PHP, C, Java, etc.
Go has only one looping construct, the for loop.
The basic for loop has three components separated by semicolons:
– the init statement: executed before the first iteration
– the condition expression: evaluated before every iteration
– the post statement: executed at the end of every iteration
The init statement will often be a short variable declaration, and the variables declared there are visible only in the scope of the for statement.
The loop will stop iterating once the boolean condition evaluates to false.
Note: Unlike other languages like C, Java, or Javascript there are no parentheses surrounding the three components of the for statement and the braces { } are always required.
Following there’s some examples that shows each variation with its equivalent in PHP:
var counter int = 0
for counter < 100 {
counter += 1
}
<?php
while($counter < 100){
$counter++;
}
import "fmt"
for key, value := range list {
fmt.Printf("%d => %s\n",key, value)
}
<?php
foreach($list as $key=>$value){
echo "{$key} => {$value}\n";
}
for i := 0; i < 10; i++ {
fmt.Println("The value of i : ", i)
}
The if statement in Go, like For statement, does not need to be surrounded by ( ), but the braces { } are required.
Like for, the if statement can start with a short statement to execute before the condition.
Variables declared by the statement are only in scope until the end of the if.
As many other languages, it support the else statement.
if value, ok := m[key]; ok {
fmt.Println("value is:", value)
}
if( isset($_POST['id'])) {
$id = $_POST['id'];
}
if _string == "my example" {
fmt.Println("this is ",$string)
} else {
fmt.Println("this is no my string")
}
<?php
if($_string == "my example"){
echo "this is ".$string;
} else {
echo "this is no my string";
}
This is a multiple choice statement that allows us to select between more than two options, and most of the time faster than if-else.
The differences against other languages is that each case body breaks automatically, unless it ends with a fallthrough statement,
and Switch without a condition is the same as switch true.
This construct can be a clean way to write long if-then-else chains.
switch i {
case 0 : fmt.Println("Zero")
case 1 : fmt.Println("One")
case 2 : fmt.Println("Two")
case 3 : fmt.Println("Three")
case 4 : fmt.Println("Four")
case 5 : fmt.Println("Five")
case 6 : fmt.Println("Six")
case 7 : fmt.Println("Seven")
case 8 : fmt.Println("Eight")
case 9 : fmt.Println("Nine")
default : fmt.Println("Unknown Number")
}
<?php
switch $i {
case 0 :
echo "Zero";
break;
case 1 :
echo "One";
break;
case 2 :
echo "Two";
break;
case 3 :
echo "Three";
break;
case 4 :
echo "Four";
break;
case 5 :
echo "Five";
break;
case 6 :
echo "Six";
break;
case 7 :
echo "Seven";
break;
case 8 :
echo "Eight";
break;
case 9 :
echo "Nine";
break;
default :
echo "Unknown Number";
}
Functions are defined using the keyword func
followed by the function name, arguments and the return values.
func say_hello() {
fmt.Println("Hello From the function")
}
Functions may have a return value. This value can also be named.
func Add(first, second int) (result int){
return first + second
}
<?php
function add($first, $second) {
return ($first + $second);
}
This is one of Go goodies that does not has equivalence in other common languages like PHP or C. In Go we can return multiple values of different types, also naming each returned parameter. Let me show an example:
func divide(n,d int) (result float, err error) {
if d == 0 {
err = errors.New("")
} else {
result = n / d
}
return result, err
}
Functions can take 0 to undefined variables of a particular data type.
func sum(args ...int) (total int) {
total := 0
for _, i := range args {
total = total + i
}
return total
}
Go supports anonymous functions, which can form closures. Anonymous functions are useful when you want to define a function inline without having to name it.
func Sequence() func() int {
i := 0
return func() int {
i += 1
return i
}
}
nextValue := Sequence()
fmt.Println(nextValue()) // 1
fmt.Println(nextValue()) // 2
fmt.Println(nextValue()) // 3
fmt.Println(nextValue()) // 4
Do not miss the second part of this post where we will use this concepts while discuss OOP and concurrency.
Tags: control structures, golang
Categories: Golang, Programming
Lets talk!
Join our mailing list, we promise not to spam.