Golang or GO is a programming language developed in 2009 by three Google engineers to fulfill its high-performance needs.
Its main goal is performance, which can be achieved by combining simplicity with native parallelism (multi-threading and multi-processing).
The main source of documentation is the official website [Link] that also offers a web code test and syntax check [Link].
For developing using VS Code [Link], consider installing the extension GO, by Lukehoban [Link].
Installing Go compiler:
sudo apt-get install golang -y
Or directly from the source by creating a Bash script with the following content:
export GOLANG="$(curl https://golang.org/dl/|grep linux-armv6l|grep -v beta|head -1|awk -F\> {'print $3'}|awk -F\< {'print $1'})" wget https://golang.org/dl/$GOLANG sudo tar -C /usr/local -xzf $GOLANG rm $GOLANG unset GOLANG
Commands for running, testing for data race, building, installing, and downloading external code:
go run src/program.go go run -race src/program.go go build src/program.go go install src/program.go go get github.com/nsf/gocode
KEEP IN MIND
- GO defines variables, functions, etc as GLOBAL when the first letter of the name is capitalized, and exclusive in the context if in lower case.
- The manipulation of strings is not straightforward and will require importing the module
strconv
[Link]. Otherwise, you will have to deal with the UTF-8 representation number of each character. - GO compilation is very fast and the output binary contains everything it needs to run. No additional file is required.
- It is made for creating applications that run in servers and do not support officially any kind of GUI.
- Each project directory will be as follows:
- ProjectName (the root of the project)
- src (source code)
- The
.go
files must be located here. - Including the downloaded codes from
go get
.
- The
- bin (installed programs)
- Compiled files will be placed here is used
go install
.
- Compiled files will be placed here is used
- pkg
- mod
- Additional packets and modules will be stored here.
- mod
- src (source code)
- ProjectName (the root of the project)
DECLARATION
- const varName int
- var varName int = 10
- var varName1, varName2 = 10, 20
VARIABLE TYPES
- bool
- string
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- byte
- rune
- float32 float64
- complex64 complex128
LOGICAL OPERATORS
- &&
- ||
- !
COMPARISON OPERATORS
- ++
- !=
- <
- <=
- >
- >=
ARITHMETIC OPERATORS
- +
- –
- *
- /
- %
BIT OPERATORS
- &
- |
- ^
- &^
- <<
- >>
ARRAYS, SLICES, and RANGES
var arrayName = [3]int{1, 2, 3} var sliceNameA = arrayName[1:2] var sliceNameB = []int sliceNameB = append(sliceName, 10, 20) sliceNameC = append(sliceNameA, sliceNameB)
SIMPLIFIED DECLARATION
varName := 1 varName := 1.5 varName := 1 + 2i strName := "String" strName := `Multiline string`
IMPORT
import "fmt"
import ( "math/rand" "embed" "log" "net/http" "io" )
POINTERS
varName1 = 123 varName2 = &varName1 // refer to the memory address varName3 = *varName2 // derefer value in the pointer address
fmt.Println("First line", "Second line")
fmt.Printf("%d hex:%x bin:%b fp:%f sci:%e",11,11,11,11.0,11.0)
IF, ELSE IF, and ELSE
if varName == "A" || varName == "B" { // code } else if varName == "C" { // code } else { // code }
SWITCH
switch varName { case "A": // code fallthrough case "B": // code default: // code }
FOR LOOPS
for i != 50 { // code i ++ }
for i := 0; i <= 10; i++ { // code }
FUNCTION
func functionName(argName int) int { // code return }
ANONYMOUS FUNCTION
Anonnymous Function func (){ // code }
VARIADIC FUNCTION
func functionName(args ...int) (string, int) { for _, v := range args { // code } return strName varIntName }
HELLO WORLD
package main import "fmt" func main() { fmt.Println("Hello World!") }
CHANNELS
packet main import "fmt" import "sync" var waitGroup = sync.WaitGroup{} func main { channelName := make(chan int) waitGroup.Add(2) go func(){ i := <- channelName fmt.Println(i) waitGroup.Done() }() go func(){ channelName <- 99 waitGroup.Done() }() waitGroup.Wait() }
HTTP LISTENER
package main import "net/http" func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Welcome!")) }) err := http.ListenAndServe(":80", nil) if err != nil { panic(err.Error()) } }