Кружок Программирования

Язык программирования Go (Golang)

Go (или Golang) — современный компилируемый язык программирования, созданный в компании Google для разработки быстрых, надёжных и масштабируемых приложений.

Сегодня Go широко применяется при создании веб-серверов, REST API, облачных сервисов, сетевых утилит и микросервисной архитектуры. Он сочетает высокую производительность языков C и C++ с простотой, характерной для Python.

Интересный факт
Официальное название языка — Go. Название Golang не является официальным, однако широко используется в Интернете, чтобы избежать путаницы с английским словом go.

История создания

Работа над языком началась в 2007 году внутри компании Google. Его авторами стали три известных инженера:

  • Роберт Гризмер (Robert Griesemer);
  • Роб Пайк (Rob Pike);
  • Кен Томпсон (Ken Thompson) — один из создателей операционной системы Unix.

Первая публичная версия языка была представлена в 2009 году. Главной задачей разработчиков было создать язык, который позволял бы писать большие серверные программы значительно проще, чем на C++, но при этом без потери производительности.

Почему это было важно?
В Google огромные проекты содержат миллионы строк кода. Компиляция могла занимать десятки минут, а поддержка сложного кода требовала больших усилий. Go создавался как язык, который позволит уменьшить сложность разработки.

Почему появился Go

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

Язык Основные достоинства Недостатки
C Очень высокая скорость работы Ручное управление памятью
C++ Высокая производительность Очень сложный синтаксис
Java Автоматическое управление памятью Большой объём памяти и длительный запуск
Python Простой и понятный код Невысокая скорость выполнения

Разработчики Go попытались объединить лучшие качества этих языков в одном проекте.

  • простоту Python;
  • скорость C и C++;
  • автоматическое управление памятью, как в Java;
  • встроенную поддержку многопоточности.
Важно
Создатели Go сознательно отказались от многих сложных возможностей, существующих в других языках. Благодаря этому язык оказался небольшим, легко изучается и остаётся достаточно простым даже в крупных проектах.

Главная идея языка

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

Лучше иметь небольшой набор простых возможностей, чем огромный набор сложных.

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

Что запомнить
  • Go разработан в компании Google.
  • Первая версия языка вышла в 2009 году.
  • Главные преимущества Go — простота, высокая скорость и встроенная поддержка конкурентного выполнения программ.
  • Go особенно хорошо подходит для серверной разработки.

Где используется Go

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

На Go написаны многие известные проекты:

  • Docker — система контейнеризации приложений;
  • Kubernetes — платформа оркестрации контейнеров;
  • Terraform — инструмент автоматического управления инфраструктурой;
  • Prometheus — система мониторинга;
  • Grafana Loki — система хранения и анализа логов;
  • десятки веб-серверов, сетевых прокси и облачных сервисов.
Почему именно Go?
Большинство перечисленных проектов постоянно обрабатывают тысячи или миллионы сетевых запросов. Для подобных задач очень важны скорость, небольшое потребление памяти и эффективная работа с большим количеством одновременно выполняющихся операций.

Основные преимущества Go

Популярность языка объясняется не только высокой скоростью работы. Go обладает рядом особенностей, которые значительно упрощают разработку.

Преимущество Что это даёт разработчику
Простой синтаксис Язык можно освоить значительно быстрее, чем C++ или Java.
Быстрая компиляция Даже крупные проекты собираются за считанные секунды.
Высокая производительность Программы работают почти так же быстро, как написанные на C.
Сборщик мусора Не нужно самостоятельно освобождать память.
Горутины Позволяют легко выполнять множество задач одновременно.
Статическая компиляция Обычно вся программа собирается в один исполняемый файл.
Интересная особенность
Во многих случаях готовую программу на Go можно просто скопировать на другой компьютер и сразу запустить. Для этого не требуется устанавливать дополнительные библиотеки или виртуальную машину.

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

Традиционно изучение любого языка начинается с программы, которая выводит на экран строку Hello, world!. Этот пример позволяет познакомиться с основной структурой программы.

📋
package main

import "fmt"

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

После запуска программы на экране появится:

📋
Hello, world!
Попробуйте сами

Если у вас уже установлен Go, создайте файл main.go, скопируйте в него приведённую выше программу и выполните команду:

📋
go run main.go

Если всё сделано правильно, в консоли появится сообщение Hello, world!.

Из каких частей состоит программа?

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

 


Разбор первой программы

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

Пакет main

📋
package main

Каждый файл на Go принадлежит некоторому пакету (package). Пакет — это набор файлов, объединённых общей функциональностью.

Если программа должна запускаться как самостоятельное приложение, она обязательно должна содержать пакет main. Именно он сообщает компилятору, что здесь находится точка входа в программу.

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

Подключение библиотек

📋
import "fmt"

Любая программа может использовать готовые библиотеки. Для их подключения применяется оператор import.

В данном примере подключается пакет fmt (сокращение от format), содержащий функции для вывода информации на экран.

Если библиотек несколько, запись выглядит следующим образом:

📋
import (
    "fmt"
    "time"
    "math"
)
Совет
Go автоматически удаляет неиспользуемые импорты. Если подключить библиотеку и ни разу её не использовать, компилятор выдаст ошибку.

Функция main()

📋
func main() {

}

Ключевое слово func используется для объявления функций.

Функция main() имеет особое значение — именно с неё начинается выполнение любой программы. После завершения функции main() программа заканчивает работу.

Позднее мы познакомимся с функциями, которые принимают параметры и возвращают результаты.

Вывод текста на экран

📋
fmt.Println("Hello, world!")

Функция Println() выводит переданные ей значения в консоль и автоматически переводит курсор на новую строку.

Например:

📋
fmt.Println("Привет!")
fmt.Println(25)
fmt.Println(true)

Результат работы программы:

📋
Привет!
25
true

Функция Println() умеет выводить сразу несколько значений. Между ними автоматически вставляется пробел.

📋
fmt.Println("Возраст:", 18)

Результат:

📋
Возраст: 18

Комментарии

Комментарии — это части программы, которые предназначены для разработчиков и полностью игнорируются компилятором. Они помогают объяснить назначение кода.

Однострочный комментарий начинается с двух символов //.

📋
// Это комментарий

fmt.Println("Hello")

Для комментариев, занимающих несколько строк, используется запись:

📋
/*
Это
многострочный
комментарий
*/
Важно
Хорошие комментарии объясняют почему написан тот или иной код, а не просто пересказывают то, что и так очевидно.

Почему в Go нет точек с запятой?

Если вы раньше программировали на C, C++, Java или C#, то наверняка привыкли заканчивать каждую инструкцию точкой с запятой.

В Go это обычно не требуется.

📋
fmt.Println("Hello")
fmt.Println("World")

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

Небольшое задание

Измените программу так, чтобы она выводила три строки:

  • Ваше имя;
  • Ваш возраст;
  • Ваш любимый язык программирования.

Используйте три отдельных вызова fmt.Println().


Переменные

Практически любая программа работает с данными. Это могут быть числа, текст, даты, результаты вычислений или информация, введённая пользователем. Для хранения таких данных используются переменные.

Переменная — это именованная область памяти, в которой хранится некоторое значение. Во время работы программы значение переменной можно изменять.

Пример из жизни
Представьте коробку с наклейкой Возраст. Внутри лежит число 18. Если через год заменить число на 19, сама коробка останется той же, изменится только её содержимое. Переменная работает похожим образом.

Объявление переменной

Самый полный способ объявления переменной выглядит так:

📋
var age int = 18

Эта строка состоит из нескольких частей:

Часть Назначение
var Объявление новой переменной.
age Имя переменной.
int Тип данных.
18 Начальное значение.

После выполнения этой инструкции в памяти появится переменная с именем age, содержащая число 18.

Изменение значения

Значение переменной можно менять сколько угодно раз.

📋
var age int = 18

age = 19

fmt.Println(age)

Результат выполнения:

📋
19
Обратите внимание
При изменении значения слово var повторно писать не нужно. Переменная уже существует.

Краткая форма записи

В реальных программах чаще используется сокращённая запись:

📋
age := 18

В этом случае компилятор самостоятельно определяет тип переменной. Такой механизм называется выводом типов (type inference).

Следующие две записи полностью эквивалентны:

📋
var age int = 18

age := 18

Однако вторая запись короче, поэтому именно она встречается в большинстве программ на Go.

Важно
Оператор := можно использовать только при создании новой переменной. Если переменная уже существует, необходимо применять обычный оператор присваивания =.

Например:

📋
age := 18

age = 19      // правильно

age := 20     // ошибка

Основные типы данных

Go поддерживает большое количество типов данных, однако начинающим достаточно знать четыре основных.

Тип Описание Пример
int Целые числа 25
float64 Дробные числа 3.14
string Текст "Hello"
bool Логические значения true, false

Рассмотрим каждый из них подробнее.

Целые числа

📋
count := 15
year := 2026

Тип int используется для хранения целых чисел без дробной части.

Дробные числа

📋
price := 19.95
pi := 3.1415926

Для хранения дробных чисел обычно используется тип float64.

Строки

📋
name := "Alice"
city := "Новосибирск"

Строковые значения всегда заключаются в двойные кавычки.

Логические значения

📋
isAdmin := true
isStudent := false

Тип bool может принимать только два значения: true (истина) и false (ложь).

Попробуйте сами

Создайте четыре переменные:

  • ваше имя;
  • ваш возраст;
  • ваш рост (дробное число);
  • логическое значение, показывающее, являетесь ли вы студентом.

Выведите все четыре переменные с помощью функции fmt.Println().


Константы

Не все значения в программе должны изменяться. Например, число дней в неделе, количество месяцев в году или значение числа π остаются постоянными. Для хранения таких значений используются константы.

Константа объявляется при помощи ключевого слова const. После создания изменить её значение уже нельзя.

📋
const pi = 3.1415926535

Можно явно указать тип данных:

📋
const daysInWeek int = 7

Несколько констант удобно объявлять сразу:

📋
const (
    monday = 1
    tuesday = 2
    wednesday = 3
)
Важно
Попытка изменить значение константы приведёт к ошибке компиляции.
📋
const pi = 3.14

pi = 3.1415    // Ошибка!

Арифметические операторы

Go поддерживает привычные математические операции.

Оператор Назначение Пример
+ Сложение 5 + 2 = 7
- Вычитание 5 - 2 = 3
* Умножение 5 * 2 = 10
/ Деление 10 / 2 = 5
% Остаток от деления 11 % 3 = 2

Пример программы:

📋
a := 12
b := 5

fmt.Println(a + b)
fmt.Println(a - b)
fmt.Println(a * b)
fmt.Println(a / b)
fmt.Println(a % b)

Результат выполнения:

📋
17
7
60
2
2
Обратите внимание
При делении двух целых чисел дробная часть отбрасывается.
📋
fmt.Println(7 / 2)

Результат:

📋
3

Чтобы получить дробный результат, хотя бы один операнд должен иметь тип float64.

📋
a := 7.0
b := 2.0

fmt.Println(a / b)

Результат:

📋
3.5

Краткие арифметические операции

Очень часто необходимо увеличить или уменьшить значение переменной. Для этого существуют сокращённые формы записи.

📋
x := 10

x += 5
x -= 2
x *= 3
x /= 4

Эти операции полностью эквивалентны следующей записи:

📋
x = x + 5
x = x - 2
x = x * 3
x = x / 4

Для увеличения или уменьшения числа на единицу существуют специальные операторы:

📋
count++

count--

Первый оператор увеличивает значение переменной на единицу, второй — уменьшает.

Интересная особенность Go
В отличие от C, C++ и Java операторы ++ и -- в Go являются инструкциями, а не выражениями. Их можно использовать только отдельной строкой.
📋
x++

fmt.Println(x)

Следующая запись является ошибкой:

📋
fmt.Println(x++)
Попробуйте сами

Создайте две переменные со значениями 15 и 4. Выведите результаты:

  • сложения;
  • вычитания;
  • умножения;
  • целочисленного деления;
  • остатка от деления.

После этого увеличьте первое число на единицу при помощи оператора ++ и снова выведите его на экран.

Далее: горутины и каналы
Страница создана 05.08.2026
Просмотров 22
🖌️🎨