Знайомство з мовою програмування Golang
Основи Golang та хмари
Go: мова хмарних технологій
Docker, Kubernetes, Prometheus. Що спільного у цих інструментів, які складають основу сучасної хмарної інфраструктури? Всі вони написані на Go.
Go, або Golang, був створений у Google для вирішення проблем масштабування та продуктивності. Його філософія проста: мінімалістичний синтаксис, швидка компіляція та потужна вбудована підтримка паралелізму. На відміну від скриптових мов, Go компілюється у статичний бінарний файл — єдиний виконуваний файл, що не має зовнішніх залежностей. Це робить його ідеальним для розгортання в контейнерах.
Налаштування середовища
Встановлення Go — це простий процес. Завантажте відповідний пакунок для вашої операційної системи з офіційного сайту go.dev та дотримуйтесь інструкцій. Після встановлення відкрийте термінал і перевірте версію, щоб переконатися, що все налаштовано правильно.
go version
Ви повинні побачити щось на зразок go version go1.22.1 linux/amd64. Це підтверджує, що Go готовий до роботи.
Ваш перший Go-проект
Сучасні проекти на Go використовують модулі для керування залежностями. Модуль — це колекція пов'язаних пакетів Go. Почнемо зі створення нового проекту.
Спершу створіть директорію для вашого проекту та перейдіть у неї. Потім ініціалізуйте новий модуль за допомогою команди go mod init.
mkdir my-cloud-app
cd my-cloud-app
go mod init github.com/your-user/my-cloud-app
Ця команда створює файл go.mod, який відстежує залежності вашого проекту. Шлях модуля, як-от github.com/your-user/my-cloud-app, зазвичай відповідає URL-адресі, де буде зберігатися ваш код. Це дозволяє іншим легко імпортувати ваш код.
Тепер створімо наш перший файл, main.go.
package main
import "fmt"
// main є точкою входу для виконуваного файлу.
func main() {
fmt.Println("Привіт, хмаро!")
}
Розберемо його структуру:
package mainоголошує, що цей файл належить до пакетуmain. Це спеціальний пакет, який вказує компілятору Go, що він повинен створити виконуваний файл.import "fmt"імпортує пакетfmtзі стандартної бібліотеки, який містить функції для форматованого введення та виведення, наприклад, друк у консоль.func main()— це головна функція, з якої починається виконання програми.
Змінні та статична типізація
Go — мова зі статичною типізацією. Це означає, що тип кожної змінної відомий на етапі компіляції. Такий підхід допомагає уникнути багатьох помилок під час виконання, що є критично важливим для надійних хмарних сервісів.
Змінні можна оголошувати кількома способами. Повний синтаксис виглядає так:
// Оголошення змінної з типом та початковим значенням
var serviceName string = "AuthService"
// Оголошення без початкового значення
// Змінній буде присвоєно "нульове" значення для її типу (для string це "")
var version string
Однак частіше використовується короткий синтаксис :=. Він дозволяє Go автоматично виводити тип змінної з її значення. Цей синтаксис можна використовувати лише всередині функцій.
func main() {
// Go автоматично визначає, що serviceName - це string
serviceName := "AuthService"
// А port - це int
port := 8080
// isRunning - це bool
isRunning := true
fmt.Println(serviceName, "працює на порту", port)
}
Основні типи даних у Go включають:
stringдля текстових даних.int,int32,int64для цілих чисел.float32,float64для чисел із плаваючою комою.boolдля значеньtrueабоfalse.
Строга типізація гарантує, що ви не зможете, наприклад, випадково додати рядок до числа, що підвищує стабільність коду.
Компіляція та запуск
У Go є два основні способи виконати ваш код. Команда go run компілює та одразу запускає програму. Це зручно для швидкої розробки та тестування.
go run main.go
Для створення виконуваного файлу, готового до розгортання, використовується команда go build.
# Ця команда створить бінарний файл з назвою my-cloud-app
# (на основі назви директорії/модуля)
go build
Після виконання цієї команди у вашій директорії з'явиться один виконуваний файл. Він містить усе необхідне для запуску вашої програми. Його можна скопіювати на сервер або в Docker-контейнер і запустити без встановлення додаткових бібліотек чи середовищ виконання.
Ця властивість Go — статична компіляція — є ключовою перевагою для контейнеризації. Вона дозволяє створювати мінімалістичні Docker-образи, що містять лише ваш скомпільований додаток і, можливо, базовий образ ОС, як-от Alpine Linux.
Наприклад, ви можете скомпілювати додаток для Linux, навіть працюючи на macOS або Windows, вказавши цільову операційну систему та архітектуру.
# Компіляція для 64-бітної системи Linux
GOOS=linux GOARCH=amd64 go build -o my-app-linux
Отриманий бінарний файл my-app-linux готовий для копіювання в Docker-образ на базі Linux. Це робить процес створення компактних, швидких та портативних контейнерів надзвичайно простим.
Яка головна перевага компіляції Go в єдиний статичний бінарний файл, особливо для хмарних додатків?
Яка команда використовується для ініціалізації нового модуля в проєкті на Go?
Ми розглянули основи Go, які роблять його ідеальною мовою для хмарної розробки. Далі ми заглибимося в структури керування, функції та пакети.
