Shanraq.org Shanraq.org
Как установить Go и настроить VS Code: рабочее место с нуля
IT

Go: с нуля до своего блога Урок 2 из 50

Как установить Go и настроить VS Code: рабочее место с нуля

Второй урок курса по Go. Что поставить до первой строки кода: сам Go 1.27, редактор VS Code с расширением Go, папка проекта и команда go mod init. Разбираем, кто за что отвечает: язык, редактор, расширение и терминал. В конце ваша первая программа здоровается с миром в терминале.

Зачем это нужно

Программист работает тремя разными вещами: языком, редактором и терминалом. Новичок их путает — и потом не понимает, кто виноват, когда что-то не заработало.

Полчаса сейчас, и вы будете знать, к кому идти с какой бедой. Это скучный урок, но он единственный такой: дальше будет только код.

Сразу целиком

Вот к чему мы придём. Папка с двумя файлами:

go-oqu/
└── sabaq-01/
    ├── go.mod
    └── main.go

И команда, которая её запускает:

go run .
Привет, мир!

Всё остальное в уроке — как к этому прийти и что здесь что.

Разбор

Три инструмента и кто за что отвечает

Go — это сам язык плюс набор команд. Он превращает написанный вами текст в работающую программу. Без него не запустится ничего.

Образ. Прораб с бригадой. Вы приносите чертёж, он строит по нему дом. Чертёж сам по себе жить негде.

Редактор — окно, в котором вы пишете текст. Сам он ничего не запускает и ничего не понимает в Go, пока ему не помогут. Мы возьмём VS Code: он бесплатный и одинаково работает на Windows, macOS и Linux.

Образ. Стол с лампой, линейкой и хорошей бумагой. Чертить можно и на коленке в потёмках — просто медленнее и с ошибками.

Терминал — окно, где программе отдают команды текстом. Он встроен в VS Code, отдельно открывать не нужно.

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

Запомните это разделение, оно экономит часы:

  • программа не собирается и Go ругается на ваш код — виноват код;
  • в редакторе красное подчёркивание, но go run работает — это подсказка расширения, а не ошибка;
  • терминал отвечает «команда не найдена» — дело в установке, а не в программе.

Ставим Go

Откройте go.dev/dl. Скачайте установщик для своей системы: берите последнюю стабильную версию, которую предлагает страница — на момент написания урока это go1.27.1. Запустите его и пройдите обычные «Далее».

Не распаковывайте архив руками куда попало. Установщик кладёт Go туда, где система его найдёт, и прописывает его в PATH.

PATH — это список папок, в которых терминал ищет команды. Когда вы набираете go, терминал не ищет по всему диску, он смотрит только в этот список. Поэтому программа, установленная «мимо» PATH, есть на диске, но для терминала её не существует.

Образ. Список адресов у курьера. Магазин может стоять на соседней улице, но если его нет в списке, курьер вернётся и скажет: такого нет. Он не обходит город, он читает список.

Закройте терминал и откройте заново — он читает PATH при запуске. Проверьте:

go version

Должна прийти строка вроде go version go1.27.1 darwin/arm64. Последние два слова — ваша система и тип процессора, у вас они будут свои.

Ставим редактор

Откройте code.visualstudio.com, скачайте, установите.

Расширение — это дополнение, которое учит редактор чему-то новому. Из коробки VS Code не знает про Go ничего.

Образ. Насадка на дрель. Дрель одна, а сверлит она и дерево, и бетон — смотря что вы в неё вставили.

Нужно одно обязательное. Нажмите Ctrl+Shift+X (на Mac ⇧⌘X), наберите в поиске Go и поставьте расширение, у которого автор Go Team at Google. Оно официальное.

Когда вы первый раз откроете файл с расширением .go, редактор внизу справа предложит Install All. Соглашайтесь. Он доставит несколько вспомогательных программ; главная называется gopls — она и даёт подсказки при наборе, показывает ошибки, пока вы ещё печатаете, и приводит код к общему виду при сохранении.

Образ. Корректор, читающий через плечо. Вы ещё пишете фразу, а он уже подчёркивает опечатку карандашом.

По желанию поставьте Error Lens — он пишет текст ошибки прямо в строке, а не прячет его под подчёркивание. Новичку это заметно помогает.

Если не получилось. Кнопка Install All не появилась — нажмите Ctrl+Shift+P (на Mac ⌘⇧P), наберите Go: Install/Update Tools, отметьте всё и подтвердите. Терминал отвечает command not found: go, хотя установщик отработал — закройте терминал и редактор целиком и откройте заново: PATH читается при запуске. Если и это не помогло, перезагрузите компьютер: на Windows это чаще всего и есть лекарство. На школьном или рабочем компьютере ставить программы запретили — язык до урока про сервер можно проходить на go.dev/play прямо в браузере, но начиная с сервера понадобится своя машина, и это стоит выяснить сейчас, а не через две недели.

Папка для работы

Раньше Go требовал держать код в одном особом месте. Это правило (GOPATH) давно отменили: проект теперь — просто папка. Но своё место нужно вам, а не Go.

Создайте одну папку под весь курс, а внутри — по папке на урок:

  • macOS и Linux: ~/go-oqu/sabaq-01
  • Windows: %USERPROFILE%\go-oqu\sabaq-01 — то есть внутри вашей папки пользователя. В корень диска C:\ обычная учётная запись писать не всегда может.

Папку можно создать мышкой, а можно командой. В терминале VS Code на Windows по умолчанию открывается PowerShell, и в нём папка пользователя называется $HOME, а не %USERPROFILE%:

cd $HOME
mkdir go-oqu
cd go-oqu

На macOS и Linux то же самое:

cd ~
mkdir go-oqu
cd go-oqu

Не Рабочий стол и не Загрузки: там файлы теряются среди чужих, а Загрузки некоторые системы чистят сами. И называйте папки латиницей без пробелов — путь с пробелами и кириллицей время от времени ломает инструменты, а разбираться в этом на втором уроке незачем.

Откройте эту папку в редакторе: File → Open Folder. Важно открыть именно папку, а не отдельный файл, иначе подсказки работать не будут.

go mod init: как назвать проект

Откройте терминал внутри VS Code — меню Terminal → New Terminal или сочетание Ctrl + ` (клавиша с обратным апострофом, слева от единицы). В папке урока выполните:

go mod init sabaq01

Рядом появится файл go.mod из двух строк — имя проекта и версия Go. Это его паспорт: по нему Go понимает, где проект начинается и как он называется.

Образ. Табличка с адресом на доме. Без неё почтальон видит стены, но не знает, где заканчивается один дом и начинается другой.

Строго говоря, программа из шести строк запустится и без него. Но без go.mod редактор работает в урезанном режиме: границы проекта не определены, и часть подсказок пропадает. Полностью разберём модули, когда дойдём до пакетов.

Почему чтения мало

Скажем сразу, чтобы вы не потеряли время.

Чтение не даёт умения. Оно готовит почву: после урока вам кажется, что всё понятно, — и это ощущение обманывает.

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

Набор устроен иначе. Печатая, вы достаёте код из головы, а не опознаёте его на странице, и повторение откладывается в другой памяти — той, что зовут мышечной. Она копится медленнее, зато держится годами и не требует внимания: пальцы сами ставят двоеточие перед равно и закрывают фигурную скобку, сами помнят, в каком порядке идут func, имя и скобки, — а голова в это время занята задачей, а не синтаксисом. Это та же память, что у музыканта и спортсмена, и работает она так же.

Отсюда не следует, что читать не надо. Нужны обе половины, и ни одна не заменяет другую: чтение даёт сведения — что такое срез, почему append возвращает новый, — а набор превращает сведения в умение. Без первого вы будете угадывать, без второго — только узнавать чужой код.

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

Отсюда правило на весь курс:

  1. Задание решайте в VS Code. Редактор подчёркивает ошибку, пока вы ещё печатаете, подсказывает имена и приводит отступы в порядок при сохранении. Он учит вас по ходу дела — поле на сайте так не умеет.
  2. Запустите и убедитесь, что работает. go run . и своими глазами на результат.
  3. И только потом — проверка на сайте. Она нужна не чтобы найти опечатку, а чтобы подтвердить, что задание понято правильно. Проверок три на урок, и тратить их на то, что редактор показал бы бесплатно, незачем.

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

Создайте в той же папке файл main.go:

package main

import "fmt"

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

«Привет, мир!» — полвека первая программа на любом языке печатает приветствие миру, и на английском она называется Hello, World. Традицию мы не нарушаем, просто говорим на своём языке.

Что написано в этих шести строках

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

package main — объявление, что это за файл. Пакет — папка с кодом, у которой есть имя. Имя main особенное: оно означает «программа, которую можно запустить», а не «набор деталей для чужих программ».

Образ. Табличка на двери. main — «ВХОД», сюда заходят с улицы. Пакет с любым другим именем — служебное помещение: дверь есть, но она не для посетителей.

import "fmt" — что взять с собой в работу. fmt (от английского format) умеет печатать текст. Не написали import — инструмента нет, и программа не соберётся.

Образ. Склад инструментов и ваш верстак. import — это то, что вы сняли со склада и положили перед собой. Всё остальное лежит на полках, и рука до него не дотянется.

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

Образ. Рецепт в тетради. Он лежит и ждёт. Пока по нему не начали готовить, на кухне пусто.

main — имя этой функции, и оно тоже особенное: именно сюда Go входит, когда программа запускается. Такая функция в программе ровно одна.

Образ. Парадная дверь. Комнат в доме сколько угодно, но входят всегда через неё.

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

{ и } — фигурные скобки. Всё между ними и есть тело функции, то, что она делает.

Образ. Стены комнаты. { — вошли, } — вышли. Скобки всегда парные: стены без второй стены не бывает.

fmt.Println("Привет, мир!") — печатает строку в терминал. Точка читается как «из»: «из fmt возьми Println». Само имя — от английского print line: напечатать строку и перевести курсор на новую.

Образ. Ящик с инструментами и инструмент в нём. fmt — ящик, Println — молоток, точка — рука, которая его достаёт.

Шесть строк, восемь понятий. Дальше в курсе они уже не объясняются — считается, что вы их знаете.

Запустите:

go run .

Точка означает «всё, что лежит в этой папке». Можно было написать и go run main.go, но с точкой не придётся ничего менять, когда файлов станет больше.

Карта урока

Карта урока: редактор, терминал и Go — кто за что отвечает

Скажите своими словами

Не подглядывая, ответьте вслух или на бумаге. Ответы — в конце урока.

  1. Если удалить VS Code, ваша программа перестанет запускаться?
  2. Терминал отвечает command not found: go. Что именно произошло и где искать причину?
  3. Зачем нужен go.mod, если программа из шести строк работает и без него?

Задание

Обязательное. Пройдите урок до конца: Go установлен, папка создана, go run . печатает приветствие. Потом замените «мир» на своё имя и запустите ещё раз.

По желанию.

  • Откройте go.mod и прочитайте обе строки. Что там написано?
  • Создайте рядом папку sabaq-02 и повторите всё по памяти, не подглядывая.
  • Уберите из main.go строку import "fmt" и запустите. Прочитайте, что скажет Go, и верните обратно. Полезно один раз увидеть ошибку намеренно.

Куда это встанет в блоге

В этой папке будет жить ваш блог. Все следующие уроки начинаются одинаково: новая папка, go mod init, main.go — пока в уроке про пакеты мы не соберём всё в один проект.

Ответы

Показать ответы
  1. Нет. Редактор — это окно для текста; запускает программу Go. Писать можно хоть в «Блокноте», просто без подсказок и неудобно.
  2. Терминал перебрал папки из PATH и не нашёл там команду go. Либо Go не установлен, либо установщик прописал путь уже после того, как терминал был открыт. Сначала закройте и откройте терминал заново; на Windows иногда нужно выйти из системы и войти снова.
  3. Программа из шести строк действительно запустится. go.mod нужен, как только появятся чужие пакеты или несколько файлов, — и он нужен редактору уже сейчас: без него gopls не видит границ проекта и молчит.

Источники

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.