Ваша первая программа

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

Сначала создадим новую директорию, в которой будем хранить нашу программу. Установщик, о котором говорилось в первой главе, создал в вашей домашней директории каталог Go. Теперь создайте директорию под названием ~/Go/src/golang-book/chapter2 (где ~ означает вашу домашнюю директорию). Вы можете сделать это из терминала с помощью следующих команд:

mkdir Go/src/golang-book
mkdir Go/src/golang-book/chapter2

Используя текстовый редактор, введите следующее:

package main

import "fmt"

// this is a comment

func main() {
    fmt.Println("Hello World")
}

Убедитесь, что содержимое файла идентично показанному здесь примеру, и сохраните его под именем main.go в созданной ранее директории. Затем откройте новое окно терминала и введите:

cd Go/src/golang-book/chapter2
go run main.go

В окне терминала вы должны увидеть сообщение Hello World. Команда go run берет указанные файлы (разделенные пробелами), компилирует их в исполняемые файлы, сохраняет во временной директории и запускает. Если вы не увидели Hello World, то, вероятно, где-то была допущена ошибка, и компилятор подскажет вам, где конкретно. Как и большинство компиляторов, компилятор Go крайне педантичен и не прощает ошибок.

Как читать программу на Go

Теперь давайте рассмотрим программу более детально. Программы на Go читаются сверху вниз, слева направо (как книга). Первая строка гласит:

package main

Это называется «определением пакета». Любая Go программа должна начинаться с определения имени пакета. Пакеты — это подход Go к организации и повторному использованию кода. Есть два типа программ на Go: исполняемые файлы и разделяемые библиотеки. Исполняемые файлы являются видом программ, которые можно запустить прямо из терминала (в Windows их имя заканчивается на .exe). Библиотеки являются коллекциями кода, который можно использовать из других программ. Детальнее мы будем рассматривать библиотеки чуть позже, а пока просто не забудьте включать эту строку в программы, которые вы пишете.

Далее следует пустая строка. Компьютер представляет новые строки специальным символом (или несколькими символами). Символы новой строки, пробелы и символы табуляции называются разделителями. Go не обращает на них внимания, но мы используем их, чтобы облегчить себе чтение программы (вы можете удалить эту строку и убедиться, что программа ведет себя в точности как раньше).

Дальше следует это:

import "fmt"

Ключевое слово import позволяет подключить сторонние пакеты для использования их функциональности в нашей программе. Пакет fmt (сокращение от format) реализует форматирование для входных и выходных данных. Учитывая то, что мы только что узнали о пакетах, как вы думаете, что будет содержаться в верхней части файлов пакета fmt?

Обратите внимание, что fmt взят в двойные кавычки. Использование двойных кавычек называется «строковым литералом», который в свою очередь является видом «выражения». Строки в Go представляют собой набор символов (букв, чисел, …) определенной длины. Строки мы рассмотрим детально в следующей главе, а сейчас главное иметь в виду, что за открывающим символом " в конечном итоге должен последовать и закрывающий. Всё, что находится между ними, будет являться строкой (символ " сам по себе не является частью строки).

Строка, начинающаяся с //, является комментарием. Комментарии игнорируются компилятором Go и служат пояснениями исключительно для вас (или для тех, кто будет потом читать ваш код). Go поддерживает два вида комментариев: // превращает в комментарий весь текст до конца строки и /* */, где комментарием является всё, что содержится между символами * (включая переносы строк).

Далее можно увидеть объявление функции:

func main() {
    fmt.Println("Hello World")
}

Функции являются кирпичиками программы на Go. Они имеют входы, выходы и ряд действий, называемых операторами, расположенных в определенном порядке. Любая функция начинается с ключевого слова func за которым следуют: имя функции (в нашем случае main), список из нуля и более параметров в круглых скобках, возвращаемый тип (если есть) и само «тело», заключенное в фигурные скобки. Наша функция не имеет входных параметров, ничего не возвращает и содержит всего один оператор. Имя main является особенным, эта функция будет вызываться сама при запуске программы.

Заключительной частью нашей программы является эта строка:

fmt.Println("Hello World")

Этот оператор содержит три части: доступ к функции пакета fmt под названием Println (Print line), затем создание новой строки, содержащей Hello World, и вызов функции с этой строкой в качестве первого и единственного аргумента.

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

Создать новую исполняемую программу, которая использует библиотеку fmt и содержит функцию main. Эта функция не имеет аргументов, ничего не возвращает и делает следующее: использует функцию Println из библиотеки fmt и вызывает её, передавая один аргумент — строку Hello World.

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

godoc fmt Println

Среди прочей информации вы должны увидеть это:

Println formats using the default formats for its operands and writes to
standard output. Spaces are always added between operands and a newline is
appended. It returns the number of bytes written and any write error
encountered.

Go — очень хорошо документированный язык, но эта документация может быть трудна для понимания, если вы до этого не были знакомы с другими языками программирования. Тем не менее, команда godoc очень полезна для начала поиска ответов на возникающие вопросы.

Сейчас документация говорит нам, что вызов Println пошлет передаваемые ей данные на стандартный вывод — терминал, вы сейчас работаете в нём. Эта функция является причиной, по которой Hello World отображается на экране.

В следующей главе вы поймете, каким образом Go хранит и представляет вещи вроде Hello World с помощью типов.

Задачи

  • Что такое разделитель?

  • Что такое комментарий? Назовите два способа записи комментариев.

  • Наша программа начиналась с package main. С чего начинаются файлы в пакете fmt?

  • Мы использовали функцию Println из пакета fmt. Если бы мы хотели использовать функцию Exit из пакета os, что бы для этого потребовалось сделать?

  • Измените написанную программу так, чтобы вместо Hello World она выводила Hello, my name is вместе с вашем именем.

Fork me on GitHub