Functions
The type comes after the variable name.
func add(x int, y int) int {
    return x + y
}
// same type of parameters
func sub(x, y int) int {
    return x - y
}
// named return value
func multiply(x, y int) (z int) {
    z = x * y
    return
}
// multiple return values
func divide(x, y int) (int, int) {
    return x / y, x % y
}
Defer
Defer statements delay the execution until the function that contains the defer keyword has finished.
This is similar to a finally block in other languages.  
func main() {
    defer fmt.Print("world")
    fmt.Print("hello ")
    // Output: hello world
}
// Multiple defer statements
func main() {   
    defer fmt.Print("done")
    for i := 1; i <= 3; i++ {
        defer fmt.Printf("%v ", i)
    }
    // Output: 3 2 1 done
}
// Cleanup resources
func main() {   
    file, err := os.Create("filename")
    if err != nil {
        panic(err)
    }
    defer file.Close()
}
Variadic
A variadic function accepts any number of values as a single argument.
The type of the last parameter is preceded by an ellipsis (...).  
Default
Unlike many other languages Go does not support optional/default values.