Function Basics

Loading concept...

Functions in Go: Your Code’s Magic Helpers

The Story Begins: Meet the Kitchen Helpers

Imagine you have a magical kitchen. In this kitchen, you have helpers who do specific jobs. One helper chops vegetables. Another helper stirs soup. A third helper bakes bread.

Functions in Go are just like these kitchen helpers!

Each function has:

  • A name (so you can call it)
  • A job (what it does)
  • Sometimes ingredients (inputs)
  • Sometimes results (outputs)

Let’s meet your first Go functions!


1. Function Declaration: Creating Your Helper

A function declaration is like hiring a new helper and telling them exactly what to do.

The Basic Recipe

func sayHello() {
    fmt.Println("Hello!")
}

Let’s break this down:

  • func = “I’m creating a helper!”
  • sayHello = The helper’s name
  • () = Empty hands (no ingredients needed)
  • { } = The job instructions

Calling Your Helper

func main() {
    sayHello()  // Helper does the job!
    sayHello()  // Do it again!
}

Output:

Hello!
Hello!

You can call your helper as many times as you want!

graph TD A[main function starts] --> B[Call sayHello] B --> C[Prints Hello!] C --> D[Call sayHello again] D --> E[Prints Hello!] E --> F[main ends]

2. Function Parameters: Giving Ingredients

What if your helper needs something to work with? Like a chef needs ingredients?

Parameters are ingredients you give to your function.

One Ingredient

func greet(name string) {
    fmt.Println("Hello,", name)
}

func main() {
    greet("Alice")
    greet("Bob")
}

Output:

Hello, Alice
Hello, Bob

The name string part says: “This helper needs a name, and it must be text.”

Multiple Ingredients

func introduce(name string, age int) {
    fmt.Println(name, "is", age, "years old")
}

func main() {
    introduce("Alice", 10)
    introduce("Bob", 8)
}

Output:

Alice is 10 years old
Bob is 8 years old

Same Type Shortcut

When ingredients have the same type:

func add(a, b int) {
    fmt.Println(a + b)
}

Instead of a int, b int, just write a, b int!


3. Return Values: Getting Results Back

Sometimes you don’t want your helper to just do something. You want them to give you something back.

Like asking: “What’s 2 + 3?” and getting “5” as the answer.

The Return Keyword

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

func main() {
    result := add(2, 3)
    fmt.Println(result)  // 5
}

Notice the changes:

  • int after () = “I will give back a number”
  • return = “Here’s your answer!”
graph TD A[Call add 2, 3] --> B[Function receives a=2, b=3] B --> C[Calculate 2 + 3 = 5] C --> D[Return 5] D --> E[result gets 5]

Another Example

func double(n int) int {
    return n * 2
}

func main() {
    fmt.Println(double(5))   // 10
    fmt.Println(double(100)) // 200
}

4. Multiple Return Values: Getting Many Things Back

Here’s where Go becomes special and powerful!

Most languages let functions return one thing. Go lets you return many things at once!

Returning Two Values

func divide(a, b int) (int, int) {
    quotient := a / b
    remainder := a % b
    return quotient, remainder
}

func main() {
    q, r := divide(10, 3)
    fmt.Println("Quotient:", q)   // 3
    fmt.Println("Remainder:", r)  // 1
}

The (int, int) means: “I will give back TWO numbers!”

A Common Pattern: Value and Error

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

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

This pattern is everywhere in Go. Functions return:

  1. The result you want
  2. An error (or nil if everything is okay)

Ignoring a Return Value

Don’t need one of the values? Use _:

q, _ := divide(10, 3)  // Only keep quotient
fmt.Println(q)  // 3

5. Named Return Values: Labels for Your Results

Go lets you name your return values. It’s like putting labels on gift boxes before filling them!

Basic Named Returns

func rectangle(w, h int) (area, perimeter int) {
    area = w * h
    perimeter = 2 * (w + h)
    return
}

func main() {
    a, p := rectangle(5, 3)
    fmt.Println("Area:", a)       // 15
    fmt.Println("Perimeter:", p)  // 16
}

Notice:

  • (area, perimeter int) = Named return values
  • Just return at the end = Returns both named values
  • No need to write return area, perimeter

Why Use Named Returns?

1. Self-documenting code:

// Clear: we return area and perimeter
func rectangle(w, h int) (area, perimeter int)

// Less clear: what are these two ints?
func rectangle(w, h int) (int, int)

2. Cleaner early returns:

func process(n int) (result int, ok bool) {
    if n < 0 {
        return  // Returns 0, false
    }
    result = n * 2
    ok = true
    return  // Returns n*2, true
}

Named values start at their zero values (0 for int, false for bool).


The Complete Picture

graph TD A[FUNCTIONS] --> B[Declaration] A --> C[Parameters] A --> D[Return Values] B --> B1[func name{ }] C --> C1[Single: name string] C --> C2[Multiple: a, b int] D --> D1[Single: int] D --> D2[Multiple: int, error] D --> D3[Named: area int]

Quick Reference Table

Concept Syntax Example
No params, no return func name() { } func sayHi() { }
With params func name(x int) { } func greet(n string) { }
Single return func name() int { } func add(a,b int) int { }
Multiple returns func name() (int, int) func divide(a,b int) (int,int)
Named returns func name() (x int) func calc() (sum int)

Your Journey Continues!

You just learned the foundation of all Go programs. Every Go program is built from functions calling other functions.

Remember:

  • Functions are helpers with names
  • Parameters are ingredients they need
  • Return values are what they give back
  • Go can return multiple values (super useful!)
  • Named returns make code clearer

Now go write some functions! Start small:

  • A function that says your name
  • A function that adds two numbers
  • A function that returns both the sum AND difference

You’ve got this!

Loading story...

No Story Available

This concept doesn't have a story yet.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

Interactive Preview

Interactive - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Interactive Content

This concept doesn't have interactive content yet.

Cheatsheet Preview

Cheatsheet - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Cheatsheet Available

This concept doesn't have a cheatsheet yet.

Quiz Preview

Quiz - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Quiz Available

This concept doesn't have a quiz yet.