Menu
Coddy logo textTech

Основы области видимости функций

Часть раздела Основы путешествия по GO на Coddy — урок 58 из 109.

В Go переменные, объявленные внутри функции, доступны только внутри этой функции. Это называется областью видимости функции.

Создайте функцию с локальной переменной:

func calculateTotal(price int, quantity int) int {
    tax := 0.1 * float64(price * quantity)  // локальная переменная
    total := price * quantity + int(tax)
    return total
}

func main() {
    result := calculateTotal(10, 2)
    fmt.Println("Total:", result)
    // fmt.Println(tax)  // Ошибка: tax здесь недоступна
}

Вывод показывает только возвращаемое значение:

Total: 22

Переменная tax существует только внутри функции calculateTotal и к ней нельзя получить доступ из main.

challenge icon

Задание

Новичок

В этом испытании вы попрактикуетесь в понимании области видимости функций в Go. Вам нужно исправить простую программу, в которой есть проблема с областью видимости.

В программе есть глобальная переменная message и функция, которая пытается её изменить. Ваша задача — исправить код так, чтобы функция правильно обновляла глобальную переменную.

Шпаргалка

Переменные, объявленные внутри функции, доступны только внутри этой функции (область видимости функции):

func calculateTotal(price int, quantity int) int {
    tax := 0.1 * float64(price * quantity)  // локальная переменная
    total := price * quantity + int(tax)
    return total
}

func main() {
    result := calculateTotal(10, 2)
    fmt.Println("Total:", result)
    // fmt.Println(tax)  // Ошибка: tax здесь недоступна
}

Локальные переменные существуют только внутри своей функции и не могут быть доступны извне.

Попробуйте сами

package main

import "fmt"

// Глобальная переменная
var message string = "Hello from global scope"

func updateMessage() {
    // Это создает новую локальную переменную вместо изменения глобальной
    message := "Hello from function scope"
    fmt.Println("Inside function:", message)
}

func main() {
    fmt.Println("Before function call:", message)
    updateMessage()
    
    // TODO: Глобальное сообщение все еще имеет исходное значение
    // Измените функцию updateMessage(), чтобы изменить глобальную переменную
    fmt.Println("After function call:", message)
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы