Go с нуля: первый файл, go run и fmt.Println

В этом уроке мы не будем долго рассуждать, зачем нужен Go. Сделаем полезнее: создадим первый файл, запустим его через go run, соберем бинарник через go build и разберем ровно те слова, которые встретятся в минимальной программе: package main, import, func main и fmt.Println

Результат должен быть простой: в терминале появляется строка, которую вы сами напечатали из Go-кода. Если это получилось, дальше язык уже не выглядит как закрытая территория

Что получится в конце

Мы сделаем маленькую программу main.go:

package main

import "fmt"

func main() {
    name := "Dinar"
    fmt.Println("Привет,", name)
}

После запуска команда:

go run .

выведет:

Привет, Dinar

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

Что нужно заранее

Нужен установленный Go и терминал. Проверка одна:

go version

Если терминал показывает версию Go, можно продолжать. Если пишет, что команда не найдена, сначала откройте соседний урок Как установить Go: Windows, macOS, Linux и проверка версии

Работать можно в любом редакторе. Для первого файла подойдет даже обычный текстовый редактор, но удобнее использовать редактор с подсветкой Go и автоматическим форматированием

Создаем папку и модуль

Сделайте отдельную папку под урок:

mkdir go-first
cd go-first

Теперь создайте модуль:

go mod init example.com/go-first

Команда создаст файл go.mod. В первом уроке он почти пустой, но это нормальный старт для современных Go-проектов. Модуль сообщает инструментам Go, как называется проект и какие зависимости ему нужны. Даже если зависимостей пока нет, привычка начинать с go mod init сбережет нервы позже

Первый файл main.go

Создайте файл main.go и вставьте код:

package main

import "fmt"

func main() {
    name := "Dinar"
    fmt.Println("Привет,", name)
}

Запустите:

go run .

Точка в конце значит: запусти текущий пакет из текущей папки. Можно было написать go run main.go, но вариант с точкой ближе к реальной работе, где в папке быстро появляется несколько файлов

Что означает package main

Первая строка:

package main

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

Если написать другой пакет, например package tools, это уже будет не самостоятельная программа, а код, который можно подключать из другого места. Для первого урока держимся правила: хотим запускать файл как приложение, пишем package main

Зачем нужен import

Строка:

import "fmt"

подключает стандартный пакет fmt. Он отвечает за форматирование текста: печать в терминал, сборку строк, вывод значений. В нашем примере нужна функция fmt.Println

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

Что делает func main

Функция:

func main() {
    name := "Dinar"
    fmt.Println("Привет,", name)
}

это точка входа. Когда вы запускаете программу, Go ищет main внутри пакета main и начинает выполнение оттуда

Строка:

name := "Dinar"

создает переменную. Оператор := используется внутри функции, когда Go может сам вывести тип по значению справа. Здесь значение строковое, значит переменная name получает тип string

А строка:

fmt.Println("Привет,", name)

печатает несколько значений через пробел и добавляет перенос строки в конце

go run и go build

Для учебного запуска используйте:

go run .

Для сборки отдельного исполняемого файла:

go build

После go build в папке появится бинарник с именем проекта. На macOS и Linux его можно запустить так:

./go-first

На Windows обычно получится файл go-first.exe

Практическое правило простое: go run удобен, пока вы учитесь и часто меняете код; go build нужен, когда хотите получить готовую программу

Как изменить пример под себя

Поменяйте имя и добавьте еще одну переменную:

package main

import "fmt"

func main() {
    name := "Алия"
    lessonsDone := 1

    fmt.Println("Привет,", name)
    fmt.Println("Уроков пройдено:", lessonsDone)
}

Запустите снова:

go run .

Go сам поймет, что name это строка, а lessonsDone это число. В следующем уроке про переменные мы разберем, когда лучше доверять выводу типа, а когда писать тип явно

Частые ошибки и порядок проверки

Если видите go: go.mod file not found, значит вы запускаете go run . в папке без модуля. Выполните go mod init example.com/go-first или перейдите в правильную папку

Если ошибка говорит expected 'package', found ..., проверьте первую строку файла. Любой Go-файл должен начинаться с объявления пакета

Если появляется imported and not used, удалите лишний импорт или используйте пакет в коде. В Go это не предупреждение, а ошибка компиляции

Если терминал не знает команду go, проблема не в файле, а в установке или переменной PATH. Проверьте установку по официальной инструкции

Что может быть еще интересно по этой теме

Go и Golang это одно и то же? Да. Официальное название языка — Go, но в поиске и разговорах часто используют Golang, потому что короткое слово go сложно искать

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

Нужно ли сразу знать все команды go? Нет. Для старта хватит go version, go mod init, go run ., go build и позже go test

Почему Go ругается на неиспользуемые переменные? Так язык защищает проект от мусора. Для новичка это кажется строгим, но в больших проектах такая строгость экономит часы

Что открыть дальше

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x