Hello world на Go
Традиционно начнем изучение нового языка Go с программы "hello, world". Ввиду того, что язык С — один из основных прямых предков Go, у нас есть масса исторических оснований для того, чтобы начать именно с данной программы.
Go — компилируемый язык. Его инструментарий преобразует исходный код программы, а также библиотеки, от которых он зависит, в команды на машинном языке компьютера.
Доступ "под капот" Go осуществляется с помощью единой команды go
, которая имеет множество подкоманд.
Самой простой из них является подкоманда run
, компилирующая исходный код из одного или нескольких файлов с расширением .go
,
связывает их с библиотеками, а затем выполняет полученный в результате выполнимый файл.
go run helloworld.go
Если программа предназначена для использования более чем один раз или в качестве эксперимента,
вероятно, есть смысл скомпилировать ее и сохранить скомпилированный результат для дальнейшего использования.
Это делается с помощью команды build
:
go build helloworld.go
package main import "fmt" func main() { fmt.Println("Hello, world") }
Она создает бинарный выполнимый файл helloworld в Linux или helloworld.exe в Windows, который можно выполнить в любой момент времени без какой-либо обработки:
Давайте теперь поговорим об этой программе.
Код Go организован в виде пакетов, которые подобны библиотекам или модулям других языков.
Пакет состоит из одного или нескольких файлов с расширением .go
в одном каталоге,
которые определяют, какие действия выполняет данный пакет.
Каждый исходный файл начинается с объявления package
(в нашем случае, package main
),
которое указывает, к какому пакету принадлежит данный файл.
Затем следует список других пакетов, которые этот файл импортирует, а после него — объявления программы, хранящейся в этом исходном файле.
Стандартная библиотека языка Go имеет более сотни пакетов для распространенных задач, таких как ввод и вывод, сортировка, работа с текстом и т.д.
Например, пакет fmt
содержит функции для форматированного вывода и сканирования ввода.
Функция Println является одной из основных функций в пакете fmt
;
она выводит одно или несколько значений, разделенных пробелами и с добавлением символа новой строки в конце,
так что выводимые значения располагаются в одной строке.
Пакет main
— особый. Он определяет программу, т.е. выполнимый файл, а не библиотеку.
В пакете main
функция main
также является особой — именно с нее начинается программа.
Программа делает то, что делается в функции main
.
Для выполнения действий приложения функция main
обычно вызывает функции из других пакетов.
Поэтому, мы должны указать компилятору, какие пакеты необходимы для данного исходного файла;
эту задачу решают объявления import
, следующие за объявлением package
.
Импортировать нужно только те пакеты, которые необходимы для работы вашего приложения. Программа не скомпилируется как при наличии отсутствующего импорта пакетов, так и при наличии излишнего. Это строгое требование предотвращает накопление ссылок на неиспользуемые пакеты по мере развития программы. После этого в программе располагаются объявления функций(func), переменных(var), констант(const) и типов(type); по большей части порядок объявлений не имеет значения.
Go не требует точек с запятой в конце инструкции или объявления,
за исключением случаев, когда две или более инструкций находятся в одной и той же строке.
По сути, символы новой строки после определенных лексем преобразуются в точки с запятой,
так что местоположение символов новой строки имеет значение для корректного синтаксического анализа кода Go.
Например, открывающая фигурная скобка {
функции должна находиться в той же строке,
что и конец объявления func
, но не в отдельной строке,
а в выражении х + у
символ новой строки разрешен после, но не до оператора +
.
Go занимает принципиально жесткую позицию касательно форматирования кода.
Инструмент gofmt
приводит код к стандартному формату,
а подкоманда fmt
инструмента go
применяет gofmt
ко всем файлам в указанном пакете
или к файлам в текущем каталоге по умолчанию.
Вам обязательно нужно выработать привычку пропускать свой код через gofmt
.
Формальное объявление стандартного формата устраняет множество бессмысленных споров о мелочах
и, что более важно, разрешает целый ряд автоматизированных преобразований исходного кода,
которые были бы неосуществимы при разрешенном произвольном форматировании.
Многие текстовые редакторы могут настраиваться так, что при каждом сохранении файла будет запускаться инструмент gofmt, и, таким образом, ваш исходный текст всегда будет правильно отформатирован.