Объявление функций

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

Если несколько параметров одного типа — тип можно указать один раз:

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

Go позволяет возвращать несколько значений — это стандартный способ передачи ошибок:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf("деление на ноль")
    }
    return a / b, nil
}

result, err := divide(10, 3)
if err != nil {
    log.Fatal(err)
}

Возвращаемые значения можно именовать — тогда return без аргументов вернёт их текущие значения:

func minMax(s []int) (min, max int) {
    min, max = s[0], s[0]
    for _, v := range s[1:] {
        if v < min { min = v }
        if v > max { max = v }
    }
    return   // «голый» return
}

Именованные возвращаемые значения читаемы в коротких функциях, но в длинных могут запутать.

Функции — полноправные значения. Их можно присваивать, передавать и возвращать:

op := func(a, b int) int { return a + b }
fmt.Println(op(3, 4))  // 7

func apply(f func(int, int) int, a, b int) int {
    return f(a, b)
}

ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2easy
3Упражнение 3medium