Go Lunch 'n Learn example code. Most of the code is taken from http://tour.golang.org.
Anything that is not covered in this lunch 'n learn can likely be found here: http://golang.org/doc/effective_go.html
- Go is built has a concurrent, garbage-collected language with fast compilation. Large applications should compile in a few seconds on a single machine.
- When compiling, unused variables and imports are considered errors and stop compilation.
- Go does not have exceptions because the designers believe them to be cumbersome. Instead Go has Defer, Panic, and Recover.
- All Go programs are made up of packages
- Programs start running in package
main
import
is used to import other packages
- After importing you can refer to the name a package exports
- Go exports anything that begins with a capital letter
- Declare with either
var
or:=
(:=
can only be used inside functions) - Type is declared after variable name
- If initializer is present, type can be ommitted
:=
uses implicity typing- Constants can be a character, string, boolean, or a numeric value
- Return value type always comes after parameter list
- When consecutive parameters share a type it can be shortened
- Functions can return any number of results
- Go functions can return result parameters that act as normal variables while inside the function and return their current value on
return
- No ( ) and { } are required
- Can start with short statement before the execution of condition
- Variables declared in the statement are only in scope until the end of the if block
- Go only has a
for
loop - As with C, the pre and post statements can be empty and then no
;
are required - For an infinite loop the keyword
for
can just be used
- Evaluates from top to bottom
- Automatically breaks unless a case ends with a
fallthrough
statement - Switch statement without condition can be used for long if-then-else chains
- No pointer arithmetic
- A collection of fields
- Uses the dot accessor
new(T)
function allocates a zeroed struct and returns a pointer to it
- Points to an array of values
len(s)
is used to get the length of a slice- Can be re-sliced, creating a new slice value that points to the same array
- expression:
s[lo:lo]
- evaluates from
lo
throughhi-1
, inclusive s[lo:lo]
is empty ands[lo:lo+1]
has one element
- expression:
- Slices are created with the
make()
function cap(s)
is used to get the capacity of a slice
- Key value pair structure
- Can be created with
make()
delete()
is used to remove an object from a map- A loopup returns two parameters, the value (if any) and a boolean indicating if the element exists in the map
- Work just like closures in JavaScript
- Go does not have classes
- Methods can be attached to structs
- The method receiver appears between
func
and the method name - The method receiver should be a pointer to the type, this allows the method to modify properties of the type
- Interface type is defined as a set of methods
- A value of interface type can hold any value that implements those methods
- Allows for increased decoupling
- Lightweight thread, managed by Go runtime
go
is the keyword used to start a new goroutine
- Typed conduit through which you can send and receive values with the channel operator,
<-
- Must be created before use
- By default, sends and receives block until the other side is ready. This allows goroutines to synchronize without explicit locks or condition variables
- Can be buffered, provide buffer amount as the second argument to
make
- Sends to a buffered channel block only when the buffer is full. Receives block when the buffer is empty.
- A sender can close a channel to indicate that no more values with be sent
- A receiver can check if a channel is open by utilizing the second return value
- A range loop can be used to receive values until the channel is closed
- A select block blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready.
default
can be used to create a non-blocking pattern