No history yet

Основи Golang та хмари

Go: мова хмарних технологій

Docker, Kubernetes, Prometheus. Що спільного у цих інструментів, які складають основу сучасної хмарної інфраструктури? Всі вони написані на Go.

Go, або Golang, був створений у Google для вирішення проблем масштабування та продуктивності. Його філософія проста: мінімалістичний синтаксис, швидка компіляція та потужна вбудована підтримка паралелізму. На відміну від скриптових мов, Go компілюється у статичний бінарний файл — єдиний виконуваний файл, що не має зовнішніх залежностей. Це робить його ідеальним для розгортання в контейнерах.

Lesson image

Налаштування середовища

Встановлення 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. Це робить процес створення компактних, швидких та портативних контейнерів надзвичайно простим.

Quiz Questions 1/5

Яка головна перевага компіляції Go в єдиний статичний бінарний файл, особливо для хмарних додатків?

Quiz Questions 2/5

Яка команда використовується для ініціалізації нового модуля в проєкті на Go?

Ми розглянули основи Go, які роблять його ідеальною мовою для хмарної розробки. Далі ми заглибимося в структури керування, функції та пакети.