Golang return keyword
last modified May 7, 2025
This tutorial explains how to use the return keyword in Go. We'll
cover function returns with practical examples of different return scenarios.
The return statement terminates execution of the current function and optionally returns one or more values to the caller. It's fundamental to function behavior in Go.
In Go, return can return single values, multiple values, or
nothing. It always exits the function immediately when executed. Functions
with return types must return values of that type.
Basic function return
The simplest use of return exits a function and returns a single
value. This example demonstrates a basic addition function.
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
sum := add(3, 4)
fmt.Println("Sum:", sum)
}
The add function returns the sum of two integers. The return
statement calculates and returns the result. The function exits immediately.
Multiple return values
Go supports returning multiple values from functions. This example shows how to return and receive multiple values.
package main
import "fmt"
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("cannot divide 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)
}
}
The function returns both a result and an error value. This is a common Go pattern for error handling. The caller receives both values separately.
Named return values
Go allows naming return values for clarity. These variables are automatically
returned when using a bare return statement.
package main
import "fmt"
func rectProps(length, width float64) (area, perimeter float64) {
area = length * width
perimeter = 2 * (length + width)
return // naked return
}
func main() {
a, p := rectProps(5, 3)
fmt.Printf("Area: %.2f, Perimeter: %.2f\n", a, p)
}
The return values area and perimeter are declared in
the function signature. The bare return returns their current
values. This improves code readability in some cases.
Early return for error handling
return is often used for early exits in error conditions. This
example demonstrates the common Go pattern of checking errors first.
package main
import (
"fmt"
"os"
)
func processFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err // early return on error
}
defer file.Close()
// Process file contents here
fmt.Println("File processed successfully")
return nil
}
func main() {
err := processFile("test.txt")
if err != nil {
fmt.Println("Error:", err)
}
}
The function returns immediately if file opening fails. This pattern keeps the happy path unindented and makes error conditions clear.
Returning functions
Go functions can return other functions. This example shows a function that returns a closure with access to its scope.
package main
import "fmt"
func multiplier(factor int) func(int) int {
return func(x int) int {
return x * factor
}
}
func main() {
double := multiplier(2)
triple := multiplier(3)
fmt.Println("Double of 5:", double(5))
fmt.Println("Triple of 5:", triple(5))
}
The multiplier function returns another function. The returned
closure remembers the factor value from the outer scope.
Returning structs
Functions can return complex types like structs. This example demonstrates returning a custom struct type.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func createPerson(name string, age int) Person {
return Person{
Name: name,
Age: age,
}
}
func main() {
p := createPerson("Alice", 30)
fmt.Printf("%+v\n", p)
}
The function returns a fully initialized Person struct. The caller
receives the complete struct value. Struct returns are common in Go for complex
data.
Returning pointers
Functions can return pointers to values. This is useful for large structs or when you need to modify the returned value.
package main
import "fmt"
func createCounter() *int {
count := 0
return &count
}
func main() {
counter := createCounter()
*counter++
fmt.Println("Count:", *counter)
}
The function returns a pointer to a local variable. In Go, this is safe because the compiler performs escape analysis. The caller can modify the value through the pointer.
Source
This tutorial covered the return keyword in Go with practical
examples of different return patterns in functions.
Author
List all Golang tutorials.