diff --git a/languages/golang.md b/languages/golang.md index 3071ee0..b487fd7 100644 --- a/languages/golang.md +++ b/languages/golang.md @@ -9,6 +9,10 @@ - Syntax - [Basic Types](#basic-types) - [Variables](#variables) + - [Operators](#operators) + - [Conditional Statements](#conditional-statements) + - [Loops](#loops) + - [Functions](#functions) ## Hello World @@ -22,6 +26,10 @@ func main() { } ``` +[Return to Summary](#summary) + +
+ ## Go CLI Commands ```bash @@ -61,6 +69,10 @@ $ go env $ go version ``` +[Return to Summary](#summary) + +
+ ## Go Modules - Go projects are called **modules** @@ -79,6 +91,10 @@ domain.com/user/module/package Example: github.com/spf13/cobra +
+ +[Return to Summary](#summary) + ## Basic Types | Type | Set of Values | Values | @@ -101,6 +117,10 @@ Example: github.com/spf13/cobra | byte | sets of bits | alias for uint8 | | rune | Unicode characters | alias for int32 | +[Return to Summary](#summary) + +
+ ## Variables ```go @@ -133,4 +153,186 @@ var boolean bool // "" i := 1.234 // float int(i) // 1 -``` \ No newline at end of file + +// Constants +const pi = 3.1415 +``` + +
+ +## Operators + +[Return to Summary](#summary) + +Arithmetic Operators +| Symbol | Operation | Valid Types | +|:---------:|:-------------:|:-------------:| +| `+` | Sum | integers, floats, complex values, strings | +| `-` | Difference | integers, floats, complex values | +| `*` | Product | integers, floats, complex values | +| `/` | Quotient | integers, floats, complex values | +| `%` | Remainder | integers | +| `&` | Bitwise AND | integers | +| `|` | Bitwise OR | integers | +| `^` | Bitwise XOR | integers | +| `&^` | Bit clear (AND NOT) | integers | +| `<<` | Left shift | integer << unsigned integer | +| `>>` | Right shift | integer >> unsigned integer | + +Comparison Operators +| Symbol | Operation | +|:---------:|:-------------:| +| `==` | Equal | +| `!=` | Not equal | +| `<` | Less | +| `<=` | Less or equal | +| `>` | Greater | +| `>=` | Greater or equal | + +Logical Operators +| Symbol | Operation | +|:---------:|:-------------:| +| `&&` | Conditional AND | +| `||` | Conditional OR | +| `!` | NOT | + +[Return to Summary](#summary) + +
+ +## Conditional Statements + +```go +// If / Else +i := 1 + +if i > 0 { + // Condition is True! i is greater than zero +} else { + // Condition is False! i is lower or equal to zero +} + +// Else if +i := 1 + +if i > 0 { + // Condition is True! i is greater than zero +} else if i > 0 && i < 2 { + // Condition is True! i greater than zero and lower than two +} else if i > 1 && i < 4 { + // Condition is True! i greater than one and lower than four +} else { + // None of the above conditions is True, so it falls here +} + +// If with short statements +i := 2.567 + +if j := int(i); j == 2 { + // Condition is True! j, the integer value of i, is equal to two +} else { + // Condition is False! j, the integer value of i, is not equal to two +} + +// Switch +text := 'hey' + +switch text { + case 'hey': + // 'Hello!' + case 'bye': + // 'Byee' + default: + // 'Ok' +} + +// Switch without condition +value := 5 + +switch { + case value < 2: + // 'Hello!' + case value >= 2 && value < 6: + // 'Byee' + default: + // 'Ok' +} +``` + +[Return to Summary](#summary) + +
+ +## Loops + +```go +// Golang only has the for loop +for i := 0; i < 10; i++ { + // i +} + +// The first and third parameters are ommitable +// For as a while +i := 0; + +for i < 10 { + i++ +} + +// Forever loop +for { + +} +``` + +[Return to Summary](#summary) + +
+ +## Functions +```go +// Functions acts as a scoped block of code +func sayHello() { + // Hello World! +} +sayHello() // Hello World! + +// Functions can take zero or more parameters, as so return zero or more parameters +func sum(x int, y int) int { + return x + y +} +sum(3, 7) // 10 + +// Returned values can be named and be used inside the function +func doubleAndTriple(x int) (double, triple int) { + double = x * 2 + triple = x * 3 + return +} +d, t := doubleAndTriple(5) +// d = 10 +// t = 15 + +// Functions can defer commands. Defered commands are +// runned in a stack order after the execution and +// returning of a function +var aux = 0 + +func switchValuesAndDouble(x, y int) { + aux = x + defer aux = 0 // cleaning variable to post use + x = y * 2 + y = aux * 2 +} + +a, b = 2, 5 +switchValuesAndDouble(2, 5) + +// a = 10 +// b = 4 +// aux = 0 +``` + +[Return to Summary](#summary) + +
\ No newline at end of file