Functions in Go Language (original) (raw)

Last Updated : 5 Nov, 2024

In Go, functions are blocks of code that perform specific tasks, which can be reused throughout the program to save memory, improve readability, and save time. Functions may or may not return a value to the caller.

**Example:

Go `

package main import "fmt"

// multiply() multiplies two integers and returns the result func multiply(a, b int) int { return a * b }

func main() { result := multiply(5, 10) fmt.Printf("multiplication: %d", result) }

`

Syntax

func function_name(Parameter-list)(Return_type) {
// function body...
}

Table of Content

Function Declaration

In Go, a function is declared with the func keyword, followed by its name, parameters, and optional return type.

**Syntax

func function_name(Parameter-list)(Return_type) {
// function body...
}

For our multiply example:

func multiply(a, b int) int {
return a * b
}

Function Calling

To use a function, simply call it by its name with any necessary arguments. Here, multiply(5, 10) calls the function with 5 and 10 as arguments.

**Example

result := multiply(5, 10)
fmt.Printf("Result of multiplication: %d", result)

Function Arguments

Go supports two ways to pass arguments to functions: **Call by Value and Call by Reference. By default, Go uses call by value, meaning values are copied, and changes inside the function do not affect the caller’s variables.

Call by Value

In call by value, values of the arguments are copied to the function parameters, so changes in the function do not affect the original variables.

**Example:

Go `

package main import "fmt"

func multiply(a, b int) int { a = a * 2 // modifying a inside the function return a * b }

func main() { x := 5 y := 10 fmt.Printf("Before: x = %d, y = %d\n", x, y) result := multiply(x, y) fmt.Printf("multiplication: %d\n", result) fmt.Printf("After: x = %d, y = %d\n", x, y) }

`

Output

Before: x = 5, y = 10 multiplication: 100 After: x = 5, y = 10

Call by Reference

In call by reference, pointers are used so that changes inside the function reflect in the caller’s variables.

**Example:

Go `

package main import "fmt"

func multiply(a, b *int) int { *a = *a * 2 // modifying a's value at its memory address return *a * *b }

func main() { x := 5 y := 10 fmt.Printf("Before: x = %d, y = %d\n", x, y) result := multiply(&x, &y) fmt.Printf("multiplication: %d\n", result) fmt.Printf("After: x = %d, y = %d\n", x, y) }

`

Output

Before: x = 5, y = 10 multiplication: 100 After: x = 10, y = 10