Skip to main content

🔭 Functions in Go

Table of Contents

Functions in Go
#

Functions are central to Go. They are the building blocks of a Go program and are used to perform specific tasks. This section covers the basics of creating and using functions in Go.

Defining and Calling Functions
#

A function is defined with the func keyword, followed by the function name, a list of parameters, the return type(s), and the function body.

package main

import "fmt"

// A simple function with two parameters and one return value
func add(x int, y int) int {
    return x + y
}

func main() {
    result := add(42, 13)
    fmt.Println("42 + 13 =", result)
}

When you have multiple consecutive parameters of the same type, you can omit the type from all but the last one.

func add(x, y int) int {
    return x + y
}

Multiple Return Values
#

A function in Go can return any number of results. This is often used to return both a result and an error value.

package main

import (
    "fmt"
    "errors"
)

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 2)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", result)
    }

    result, err = divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", result)
    }
}

Variadic Functions
#

A function that can be called with a varying number of arguments is called a variadic function. The last parameter of a variadic function is of the form ...T, which means it can accept any number of arguments of type T.

package main

import "fmt"

func sum(nums ...int) {
    fmt.Print(nums, " ")
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}

func main() {
    sum(1, 2)
    sum(1, 2, 3)

    nums := []int{1, 2, 3, 4}
    sum(nums...)
}

Key Features of Functions
#

  • First-Class Citizens: Functions are first-class citizens in Go, meaning they can be assigned to variables, passed as arguments to other functions, and returned from other functions.
  • Anonymous Functions: You can create functions without a name, known as anonymous functions or function literals.
  • Closures: An anonymous function can form a closure, which means it has access to the variables in its lexical scope.

Related