Functions in Go (Golang) are first-class citizens, meaning they can be assigned to variables, passed as arguments, and returned from other functions.

Screenshot 2024-10-21 at 4.42.49 AM.png

Sum function

package main

import "fmt"

func sum(a int, b int) int {
	return a + b
}

func main() {
	fmt.Println(sum(2, 3))
}

Variants

Parameters: You can define multiple parameters of the same type in a single declaration:

func add(a, b int) int {
    return a + b
}

Return Types: You can return multiple values from a function:

package main

import "fmt"

func calculator(a, b int) (int, int) {
	return a + b, a - b
}

func main() {
	sum, sub := calculator(2, 3)
	fmt.Println(sum, " ", sub)
}

Named Return Values

You can also define named return values in a function. This allows you to specify the return values in the function signature, making the code easier to read and understand:

package main

import "fmt"

func calculator(a, b int) (sum int, sub int) {
	sum = a + b
	sub = a - b
	return
}

func main() {
	sum, sub := calculator(2, 3)
	fmt.Println(sum, " ", sub)
}

Anonymous functions

package main

import "fmt"

func main() {
	sum, sub := func(a, b int) (sum int, sub int) {
		sum = a + b
		sub = a - b
		return
	}(2, 3)

	fmt.Println(sum, " ", sub)
}

Functions as arguments

Functions can take other functions as arguments

package main

import "fmt"

func sum(a int, b int) int {
	return a + b
}

func sub(a int, b int) int {
	return a - b
}

func calculator(a int, b int, fn func(int, int) int) int {
	return fn(a, b)
}

func main() {
	ans := calculator(1, 2, sum)

	fmt.Println(ans)
}

Returning functions

package main

import "fmt"

func multiplier(factor int) func(int) int {
	return func(a int) int {
		return a * factor
	}
}

func main() {
	double := multiplier(2)
	tripple := multiplier(3)

	fmt.Println(double(3))
	fmt.Println(tripple(3))
}