Перейти к содержимому
Теория · Первая программа · урок 1 из 8

Первая программа на Go

Чему вы научитесь

Чему вы научитесь:

  • объяснять, из каких частей состоит программа на Go и где начинается её выполнение;
  • читать сообщение компилятора и исправлять ошибку, которую он нашёл;
  • подключать пакеты стандартной библиотеки и вызывать их функции;
  • писать свою функцию, которая получает числа и возвращает результат.
Карточка рецепта main, банка fmt из кладовой и галочка корректора перед кухонным окошком

Программа похожа на рецепт. В рецепте шаги записаны по порядку, и повар выполняет их один за другим, сверху вниз. Компьютер выполняет программу так же: шаг за шагом. Но повар может догадаться, что имел в виду автор, а компьютер — нет. Он делает ровно то, что написано.

Есть и ещё одна разница. Программа на Go — это текст, а процессор выполняет только машинный код. Поэтому текст программы сначала переводят в машинный код, и делает это компилятор.

Представьте строгого корректора: он читает рецепт до того, как тот попадёт на кухню. Если в тексте нарушено хоть одно правило языка, на кухню рецепт не попадёт.

Вот программа, которая печатает одну строку:

GO
package main

import "fmt"

func main() {
    fmt.Println("Hello, world") // Hello, world
}

Давайте разберём её по строкам:

  1. package main говорит, что файл относится к исполняемой программе, а не к библиотеке.
  2. import "fmt" подключает пакет fmt — готовый код из стандартной библиотеки Go, который печатает текст. Пакет — как банка с готовым продуктом из кладовой: её не готовят, а берут с полки.
  3. func main() { открывает функцию main.
  4. fmt.Println("Hello, world") — единственный шаг рецепта: напечатать Hello, world.
  5. } закрывает функцию.

Где начинается выполнение

Выполнение начинается с функции main. Функция — это именованный блок кода, а её тело — инструкции в фигурных скобках после func main().

Тело main и есть сам рецепт, который выполняет компьютер:

  • инструкции выполняются по очереди, сверху вниз;
  • после последней из них программа завершается.

Печать через fmt.Println

Запись fmt.Println читается так: функция Println из пакета fmt. Она работает по трём правилам:

  • печатает то, что стоит в скобках, и переводит строку;
  • текст в двойных кавычках печатает как есть, без кавычек;
  • если в скобках несколько значений через запятую, ставит между ними пробел.

Вот оба случая — одно значение и два:

GO
fmt.Println("first")          // first
fmt.Println("second", "line") // second line
  1. Первая строка печатает first и переходит на новую строку.
  2. Во второй строке в скобках два значения, поэтому между словами появляется пробел, а кавычек в выводе нет.

Сборка и запуск

Чтобы запустить программу, сделайте три шага:

  1. Сохраните текст программы в файл с расширением .go, например hello.go.
  2. Наберите команду go run hello.go в окне для текстовых команд.
  3. Команда передаст файл компилятору и сразу запустит то, что получилось.

Если текст нарушает правила языка, компилятор называет ошибку и строку с ней, и программа не запускается.

Здесь картинка с корректором перестаёт работать. Настоящий корректор заметил бы опечатку в слове, а компилятор проверяет правила языка, а не замысел автора. Опечатку в "Helo, world" он пропустит: вы увидите её только в том, что напечатает программа.

Комментарии

Текст от // до конца строки — комментарий, и компилятор его пропускает. В примерах курса комментарий в конце строки показывает, что эта строка печатает.

Частая ошибка

Открывающая фигурная скобка перенесена на следующую строку:

GO
package main

import "fmt"

func main()
{ // ✗
    fmt.Println("Hello, world")
}
TEXT
syntax error: unexpected semicolon or newline before {

Точка с запятой завершает инструкцию. В Go её не пишут: компилятор сам ставит её в конце строки. Давайте посмотрим, к чему это приводит здесь:

  1. Компилятор ставит точку с запятой в конце строки func main().
  2. Функция на этом заканчивается и остаётся без тела.
  3. Скобка { на следующей строке оказывается лишней, и сборка останавливается.

Поэтому открывающая скобка в Go всегда стоит на одной строке с func main().

Главное

  • Компилятор переводит текст программы в машинный код и не запускает программу, если нарушено правило языка.
  • Выполнение начинается с функции main в пакете main, и её инструкции идут сверху вниз.
  • fmt.Println печатает значения через пробел и переводит строку.
  • Открывающая фигурная скобка стоит на одной строке с func main().