Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс Golang
/

Переменные

Golang: Переменные

В Go переменные объявляются с помощью ключевого слова var:

var name string
name = "Hexlet"

Переменной name задаётся имя и тип (string). Позже в неё можно присвоить значение. Объявление и присваивание можно объединить:

var name string = "Hexlet"

После этого переменной можно присвоить другое значение того же типа:

name = "Code Basics"

Go — строго типизированный язык, поэтому тип переменной фиксирован: если name объявлена как строка, в неё нельзя записать число или логическое значение.

Значения по умолчанию

Если переменную объявить без инициализации, она получит значение по умолчанию. Для строк это пустая строка, для чисел — ноль, для булевых значений — false.

var name string   // ""
var count int     // 0
var active bool   // false

Вывод типа

Если при объявлении переменной сразу указать значение, тип можно не писать — компилятор выведет его сам на основе переданного значения. Это упрощает запись, особенно когда тип очевиден:

var name = "Hexlet"
var count = 10       // int
var active = true    // bool

При этом тип сохраняется за переменной, как если бы он был написан явно. В дальнейшем переменной можно присваивать только значения этого типа. Попытка записать значение другого типа приведёт к ошибке компиляции. Например, если name была строкой, то присваивать ей число нельзя.

Вывод типа работает только при одновременном объявлении и инициализации. Если вы просто пишете var city, без значения, то компилятор не сможет вывести тип и выдаст ошибку. В таких случаях тип нужно указывать явно:

var city            // ошибка: тип не указан
var city string     // правильно

Краткая форма объявления

Внутри функций можно использовать сокращённую форму объявления переменной с помощью оператора :=:

name := "Hexlet"

Эта форма позволяет одновременно создать переменную и присвоить ей значение. Тип по-прежнему выводится автоматически. Такой синтаксис упрощает запись и активно используется в Go-коде. Важно помнить, что := работает только внутри функций. Вне функции можно использовать только var.

С помощью := можно объявлять несколько переменных сразу:

name, course := "Hexlet", "Go"

При этом типы обеих переменных будут выведены по значениям. Такой способ часто используется при обработке нескольких значений, например при возврате значений из функции.

Особенности

  • Все переменные должны использоваться — иначе ошибка компиляции.
  • Имя переменной нельзя использовать до её объявления.

Задание

Реализуйте функцию PrintBody(), которая:

  1. Создаёт переменную name со значением "Go".
  2. Создаёт переменные language и version со значениями "Go" и 1.21 соответственно, используя сокращённую форму объявления :=.
  3. Выводит эти переменные на экран в одну строку через пробел, используя fmt.Println().

Пример

Go Go 1.21

Подсказка

Функция fmt.Println() может принимать несколько аргументов, разделяя их пробелами:

fmt.Println("Hello", "world", 2025)
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Variables

  • Effective Go - Variables

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс Golang
/

Переменные

Golang: Переменные

В Go переменные объявляются с помощью ключевого слова var:

var name string
name = "Hexlet"

Переменной name задаётся имя и тип (string). Позже в неё можно присвоить значение. Объявление и присваивание можно объединить:

var name string = "Hexlet"

После этого переменной можно присвоить другое значение того же типа:

name = "Code Basics"

Go — строго типизированный язык, поэтому тип переменной фиксирован: если name объявлена как строка, в неё нельзя записать число или логическое значение.

Значения по умолчанию

Если переменную объявить без инициализации, она получит значение по умолчанию. Для строк это пустая строка, для чисел — ноль, для булевых значений — false.

var name string   // ""
var count int     // 0
var active bool   // false

Вывод типа

Если при объявлении переменной сразу указать значение, тип можно не писать — компилятор выведет его сам на основе переданного значения. Это упрощает запись, особенно когда тип очевиден:

var name = "Hexlet"
var count = 10       // int
var active = true    // bool

При этом тип сохраняется за переменной, как если бы он был написан явно. В дальнейшем переменной можно присваивать только значения этого типа. Попытка записать значение другого типа приведёт к ошибке компиляции. Например, если name была строкой, то присваивать ей число нельзя.

Вывод типа работает только при одновременном объявлении и инициализации. Если вы просто пишете var city, без значения, то компилятор не сможет вывести тип и выдаст ошибку. В таких случаях тип нужно указывать явно:

var city            // ошибка: тип не указан
var city string     // правильно

Краткая форма объявления

Внутри функций можно использовать сокращённую форму объявления переменной с помощью оператора :=:

name := "Hexlet"

Эта форма позволяет одновременно создать переменную и присвоить ей значение. Тип по-прежнему выводится автоматически. Такой синтаксис упрощает запись и активно используется в Go-коде. Важно помнить, что := работает только внутри функций. Вне функции можно использовать только var.

С помощью := можно объявлять несколько переменных сразу:

name, course := "Hexlet", "Go"

При этом типы обеих переменных будут выведены по значениям. Такой способ часто используется при обработке нескольких значений, например при возврате значений из функции.

Особенности

  • Все переменные должны использоваться — иначе ошибка компиляции.
  • Имя переменной нельзя использовать до её объявления.

Задание

Реализуйте функцию PrintBody(), которая:

  1. Создаёт переменную name со значением "Go".
  2. Создаёт переменные language и version со значениями "Go" и 1.21 соответственно, используя сокращённую форму объявления :=.
  3. Выводит эти переменные на экран в одну строку через пробел, используя fmt.Println().

Пример

Go Go 1.21

Подсказка

Функция fmt.Println() может принимать несколько аргументов, разделяя их пробелами:

fmt.Println("Hello", "world", 2025)
Коммерческий опыт и Трудоустройство

Полезное

  • The Go Programming Language Specification - Variables

  • Effective Go - Variables

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

package solution

import (
	"bytes"
	"os"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestPrintBody(t *testing.T) {
	// Создаём буфер и перенаправляем os.Stdout
	var buf bytes.Buffer
	old := os.Stdout
	r, w, err := os.Pipe()
	assert.NoError(t, err)

	os.Stdout = w

	// Вызываем тестируемую функцию
	PrintBody()

	// Закрываем запись и читаем вывод
	err = w.Close()
	assert.NoError(t, err)
	os.Stdout = old

	_, err = buf.ReadFrom(r)
	assert.NoError(t, err)

	expected := "Go Go 1.21\n"
	assert.Equal(t, expected, buf.String(), "Вывод функции PrintBody не совпадает с ожидаемым")
}
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →