Совсем другая книга про Go

Совсем другая книга про Go #

Введение #

Формат “маленьких книг” Карла Сегуина – лучшее, что только может быть для быстрого входа. Только самое важное, необходимый минимум без деталей, в которых так легко утонуть поначалу. Когда появится общая картина и дыры, требующие заполнения, станут очевидны, задавать правильные вопросы и самостоятельно находить на них ответы – в книгах, спецификациях, интернет-обсуждениях – не составит уже никакой сложности.

Когда-то “Маленькая книга про Go” вдохновила меня написать несколько других “маленьких книг” – на темы, для которых книг Карла не было. А потом, когда я сам пришел к Go и вернулся к этой книге, оказалось, что демонстрационные примеры еще работают, а вот написать что-то реальное уже не получается. Как же так?

Все меняется, в случае с Go – меняется драматически. Модули в обновленном Go настолько отличаются, что написать программу сложнее пресловутого HelloWorld уже невозможно. И с этим надо что-то срочно делать. Начавшему однажды писать трудно остановиться. Я решил разобраться во всем сам и все это записать. Это будет совсем другая книга про Go. Подобные записи всегда делаются для себя, но если кому-то еще будет от них польза… что же, это будет лучшим применением сил и времени.

Не судите строго.

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

Здесь все по классике. Пройти все этапы от написания кода до его выполнения – первый урок в изучении любой технологии.

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

package main
import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

Выполните его:

$ go run hello.go
Hello, world!

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

$ go build hello.go
$ ./hello
Hello, world!

Вот, в общем-то и все. Скомпилированная программа это двоичный исполняемый файл для вашей операционной системы – Windows, Linux, MacOS. Собрать программу можно из одной операционной системы для другой, но это детали.

Совсем другая? #

Да, другая. Сначала важное, помните? Вот и мы, забегая вперед, начнем с модульной организации программы. А уже потом вернемся к началу.

Забегая вперед #

Модули #

В Go все это модули. Любая программа состоит из модулей, одни из которых являются частью стандартной библиотеки, другие - ваши собственные. Если один из них называется main и содержит функцию main, то его можно собрать в самостоятельный исполнимый файл. Все остальные модули можно использовать только в виде подключаемых библиотек. Кубиков для построения вашей программы. А теперь давайте еще посмотрим на нашу программу.

В первой строке объявляется имя модуля. Во второй строке импортируется содержимое модуля fmt. Этот модуль - часть стандартной библиотеки, отвечающей за форматированный ввод и вывод. В нем содержится функция Println, которую мы использовали в первой программе. Функции из модуля вызываются с указанием имени модуля - fmt.Println.

И еще. Println записано с большой (прописной) буквы не для красоты. Это еще одна важная деталь - функции, которые доступны извне, пишутся с большой буквы, а функции, доступные только внутри модуля, с маленькой.