Содержание

Первая программа на Go: установка, запуск и ввод

Первая программа нужна не для того, чтобы выучить весь язык. Она нужна, чтобы пройти самый важный барьер: написать файл, запустить его и увидеть результат в терминале. После этого язык перестает быть абстрактной теорией и становится инструментом, с которым можно экспериментировать.

Go хорошо подходит для старта: установка простая, компилятор быстрый, стандартная библиотека большая, а команда go умеет запускать, собирать, тестировать и форматировать код.

В этом руководстве мы пройдем путь от проверки установки до программы, которая спрашивает имя и печатает ответ.

Проверка установки

После установки Go откройте терминал и выполните:

go version

Если все настроено правильно, вы увидите примерно такой вывод:

go version go1.22.5 darwin/arm64

Версия и операционная система могут отличаться. Важно, что команда go найдена и отвечает.

Папка проекта

Создайте отдельную папку для первой программы:

mkdir hello-go cd hello-go

Папка проекта - это рабочий стол для конкретной программы. В ней будут лежать исходные файлы, go.mod, README и другие материалы. Даже маленький учебный проект лучше держать в отдельной директории, чтобы не смешивать файлы разных задач.

Минимальная программа

Создайте файл main.go:

package main import "fmt" func main() { fmt.Println("Привет, Praxis!") }

Запустите:

go run main.go

Вы должны увидеть:

Привет, Praxis!

Теперь разберем каждую строку.

package main

package main

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

package main имеет особое значение: он говорит компилятору, что перед нами исполняемая программа. То есть результат можно запустить как приложение.

Если вы пишете библиотеку, пакет будет называться иначе, например package calculator. Но для первой программы нужен именно main.

import

import "fmt"

import подключает другой пакет. Пакет fmt входит в стандартную библиотеку и умеет форматировать текст, печатать значения и читать ввод.

Представьте пакет как набор инструментов. Пока вы его не импортировали, эти инструменты не лежат на вашем рабочем столе. После import "fmt" вы можете вызвать fmt.Println, fmt.Printf и другие функции.

func main

func main() { fmt.Println("Привет, Praxis!") }

func main() - точка входа программы. Когда вы запускаете приложение, Go начинает выполнение именно с этой функции.

Фигурные скобки {} ограничивают тело функции. Все, что находится внутри, выполняется при запуске.

fmt.Println печатает значение и добавляет перевод строки в конце. Поэтому следующая команда в терминале появится уже на новой строке.

Что делает go run

Команда:

go run main.go

делает две вещи:

  1. Компилирует программу во временный исполняемый файл.
  2. Сразу запускает этот файл.

Это удобно во время обучения, потому что не нужно думать, где лежит бинарник. Вы изменили код, выполнили go run, увидели результат.

Для готовой программы лучше использовать go build:

go build -o hello ./hello

go build создает отдельный исполняемый файл. Его можно запускать без повторной компиляции.

Модуль Go

В современных проектах почти всегда создают go.mod:

go mod init example.com/hello-go

go.mod описывает модуль: имя проекта и зависимости. Для одной первой программы можно запустить go run main.go и без него, но лучше привыкать к правильной структуре сразу.

После go mod init проект выглядит так:

hello-go/ ├── go.mod └── main.go

Форматирование кода

Go имеет официальный форматтер:

gofmt -w main.go

Он автоматически выравнивает отступы и приводит код к общему стилю. Это одна из причин, почему Go-код в разных проектах выглядит похоже.

В большинстве редакторов можно включить форматирование при сохранении файла.

Чтение ввода

Теперь сделаем программу интерактивной. Она спросит имя и поприветствует пользователя.

package main import ( "bufio" "fmt" "os" ) func main() { scanner := bufio.NewScanner(os.Stdin) fmt.Print("Введите имя: ") scanner.Scan() name := scanner.Text() fmt.Printf("Привет, %s!\n", name) }

Здесь появились новые пакеты:

  • bufio помогает читать ввод построчно;
  • os дает доступ к стандартному вводу os.Stdin;
  • fmt печатает текст.

os.Stdin - это поток ввода. Обычно он связан с клавиатурой в терминале. bufio.Scanner читает из этого потока строку за строкой.

scanner.Scan() ждет, пока пользователь введет строку и нажмет Enter. scanner.Text() возвращает введенный текст.

Проверка ошибки Scanner

В коротких учебных примерах ошибку часто опускают, чтобы не перегружать код. В реальной программе ее нужно проверять:

if !scanner.Scan() { if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "ошибка ввода:", err) } return }

Ошибка может возникнуть, например, если ввод был прерван или поток закрылся неожиданно.

Аргументы командной строки

Не все программы должны спрашивать пользователя интерактивно. Часто данные передают сразу при запуске:

go run main.go Alice

Аргументы доступны через os.Args:

package main import ( "fmt" "os" ) func main() { if len(os.Args) < 2 { fmt.Fprintln(os.Stderr, "укажите имя") os.Exit(1) } fmt.Printf("Привет, %s!\n", os.Args[1]) }

os.Args[0] - имя программы. Первый пользовательский аргумент находится в os.Args[1].

Интерактивный ввод удобен для диалога. Аргументы командной строки удобны для автоматизации, скриптов и CLI-инструментов.

stdout и stderr

У терминальной программы есть стандартные потоки:

  • stdout - обычный результат программы;
  • stderr - ошибки и диагностические сообщения;
  • stdin - ввод.

Если программа успешно печатает результат, используйте fmt.Println. Если нужно вывести ошибку, лучше писать в os.Stderr:

fmt.Fprintln(os.Stderr, "ошибка: файл не найден")

Это важно для перенаправления:

myprogram > result.txt

Результат попадет в файл, а ошибка останется видимой в терминале.

Частые ошибки

  1. Файл назван main.txt, а не main.go.
  2. Команда запускается из другой папки.
  3. В файле нет package main.
  4. Функция написана как Main, а не main.
  5. Забыты кавычки вокруг строки.
  6. Импортирован пакет, который не используется.
  7. Файл сохранен не до запуска.

Go строго относится к неиспользуемым импортам и переменным. Это иногда раздражает новичков, но помогает держать код чистым.

Маленькие упражнения

  1. Измените текст приветствия.
  2. Спросите имя и город, затем выведите оба значения.
  3. Передайте имя через аргумент командной строки.
  4. Добавьте проверку: если имя пустое, вывести ошибку.
  5. Соберите программу через go build и запустите бинарник.

Что дальше

После первой программы переходите к переменным, типам данных, условиям if, циклам for, функциям и работе со строками. Главное - запускать код часто. Маленькая программа, которую вы проверили в терминале, полезнее большой теории без практики.

Следующий шаг после статьи

Закрепите тему во вводном проекте без регистрации, а затем переходите к курсам.

Продолжить изучение

Выбери следующую статью по маршруту или углубись в смежную тему.

Похожие статьи