Primer on Go

Install

https://stackoverflow.com/questions/12843063/install-go-with-brew-and-running-the-gotour

https://golang.org/doc/install#install

Test

cd $HOME/go/src/hello

go build

./hello

Declaration

Basic

and more idiomatically:

Pointers

*string => pointer to a string

&message => use the memory location of the variable message

so this returns

Hello all%!(EXTRA *string=0xc42007a1c0)

whereas this:

returns the value. i.e.

Hello all%!(EXTRA string=Hello all)

Basic User Types

type Salutation string

or a more complex example:

type Salutation struct {

name string

greeting string

}

func main() {

var a = Salutation{name: “Bob”, greeting: “Hi” }

fmt.Println(s.greeting, s.name)

}

Getters / Setters and Scope

There are no Getters / Setters.

A capitalised variable is publicly visible from a package. E.g. Salutation.

Lowercase is not visible.

Constants

Outputs:

Note on iota. This is used in const delarations to increment numbers.

https://github.com/golang/go/wiki/Iota

A better example of using iotais probably this:

Note the implicit iotain the const for subsequent Weekdays.

Functions

  • Multiple return values
  • Use like any other type
  • Function literals

Note: function literals aka lambdas or closures are functions without a name.

https://programming.guide/go/anonymous-function-literal-lambda-closure.html

E.g. of function declaration:


package main

import "fmt"

type Salutation struct {
    name string
    greeting string
}

func Greet(salutation Salutation) {
    fmt.Println(salutation.greeting)
    fmt.Println(salutation.name)
}

func main() {
    var s = Salutation{name: "Bob", greeting: "Hi" }

    Greet(s)

}

Order of type and variable name

Note the typecomes after the variable name (i.e. opposite to C).

E.g.

This is different to C . For why see https://blog.golang.org/gos-declaration-syntax

Also, if function parameters share a type you can leave the type to the end.

E.g.

Multiple return values

E.g.

 

Exported names

Names are exported if they begin with a capital letter.

i.e. Pi would be exported but pi would not.

Variable declarations

Multiple declarations:

var i, j int = 1, 2

 

Here k has an implicit type of int.

k := 3

Zero values:

0 for numeric

false for Boolean

"" for strings

Type conversions

E.g.

i := 42

f := float64(i)

u := uint(f)

REPL

Handy online REPL here:

https://tour.golang.org/basics/8

Leave a Reply

Your email address will not be published. Required fields are marked *