Co to jest język GO?
Autor: Redakcja Domeny.ForSale Opublikowano
W skrócie: Go to język programowania ogólnego przeznaczenia, stworzony w Google i rozwijany jako projekt open source. Najczęściej służy do budowy usług serwerowych, narzędzi uruchamianych z terminala oraz oprogramowania infrastrukturalnego. Łączy stosunkowo prostą składnię, kompilację do kodu maszynowego i wbudowane mechanizmy współbieżności, czyli organizowania wielu zadań, których wykonanie może nakładać się w czasie.
Czym Go różni się od innych języków?
Oficjalna nazwa języka to Go, choć w wyszukiwarkach i rozmowach spotkasz również określenie „Golang”. Nie oznacza ono innej wersji ani osobnej technologii. Go nie ma też związku z grą planszową o tej samej nazwie.
Go jest językiem statycznie typowanym: typy danych są sprawdzane podczas kompilacji, zanim program zostanie uruchomiony. Kompilator przekształca kod źródłowy w program przeznaczony dla wybranego systemu i architektury procesora. Pozwala też wcześnie wychwycić część błędów, na przykład próbę użycia tekstu tam, gdzie wymagana jest liczba.
Język automatycznie odzyskuje pamięć, której program już nie potrzebuje. Odpowiada za to mechanizm nazywany garbage collectorem. Programista nie musi ręcznie zwalniać każdego obszaru pamięci, ale nadal powinien kontrolować zużycie zasobów i zamykać pliki czy połączenia.
Go ma celowo ograniczoną liczbę konstrukcji językowych. Nie oferuje klasycznego dziedziczenia klas znanego z Javy; do organizowania danych i zachowań wykorzystuje między innymi struktury oraz interfejsy. Błędy są zwykle zwracane jako wartości, które kod wywołujący powinien jawnie sprawdzić.
Do czego używa się Go?
Go dobrze pasuje do programów obsługujących sieć, przetwarzających żądania i łączących różne systemy. Jego biblioteka standardowa zawiera między innymi obsługę HTTP, JSON, plików oraz testowania, więc wiele podstawowych zadań można wykonać bez rozbudowanego zestawu dodatków.
Typowe zastosowania to:
- Usługi backendowe i API — programy działające na serwerze, które udostępniają dane aplikacji internetowej lub mobilnej.
- Narzędzia terminalowe — na przykład program do wykonywania kopii zapasowych, sprawdzania konfiguracji albo automatyzowania wdrożeń.
- Oprogramowanie infrastrukturalne — narzędzia do zarządzania kontenerami, siecią i środowiskami chmurowymi. Znane projekty wykorzystujące Go to Kubernetes i Prometheus.
- Usługi przetwarzające zadania w tle — na przykład odbierające komunikaty z kolejki i zapisujące wyniki w bazie danych.
Przykładowo sklep internetowy może mieć osobną usługę w Go, która pobiera status przesyłki od kilku przewoźników i udostępnia jednolitą odpowiedź panelowi klienta. Go jest tu sensownym wyborem ze względu na narzędzia sieciowe i obsługę współbieżnych operacji. Sam język nie rozwiąże jednak problemów z limitami zewnętrznych API, awariami czy błędną logiką zamówień.
Jak działa współbieżność w Go?
Podstawowym mechanizmem współbieżności w Go są goroutines: lekkie zadania zarządzane przez środowisko wykonawcze języka. Uruchomienie funkcji z poprzedzającym słowem go pozwala wykonywać ją współbieżnie z innymi zadaniami. Goroutine nie jest osobnym wątkiem systemu operacyjnego; środowisko Go planuje ich wykonanie na wątkach.
Do komunikacji pomiędzy zadaniami mogą służyć kanały, czyli mechanizm przekazywania wartości i synchronizowania pracy. Dostępne są również blokady chroniące wspólne dane. Używanie goroutines nie usuwa automatycznie ryzyka zakleszczeń ani jednoczesnego, niebezpiecznego dostępu do pamięci.
Załóżmy, że program ma sprawdzić dostępność dziesięciu stron. Przy podejściu sekwencyjnym czeka na odpowiedź jednej strony, zanim zapyta następną. Współbieżnie może rozpocząć kilka sprawdzeń i oczekiwać na ich wyniki w tym samym czasie, z ustalonym limitem połączeń i czasem oczekiwania.
Współbieżność nie jest tym samym co równoległość. Pierwsza dotyczy organizacji zadań, druga ich rzeczywistego wykonywania jednocześnie, na przykład na kilku rdzeniach procesora. Więcej goroutines nie gwarantuje szybszego programu: ograniczeniem może być baza danych, przepustowość sieci albo koszt synchronizacji.
Kiedy wybrać Go, a kiedy inny język?
Go jest rozsądnym kandydatem, gdy tworzysz samodzielną usługę sieciową lub narzędzie, które ma być łatwe do uruchamiania na serwerach. Często można dostarczyć pojedynczy plik wykonywalny bez instalowania osobnego interpretera. Nie jest to bezwarunkowa reguła: wykorzystanie bibliotek C lub plików zewnętrznych może wprowadzić dodatkowe zależności.
Wybór innego języka może być praktyczniejszy w następujących sytuacjach:
- Analiza danych i uczenie maszynowe: Python zwykle zapewnia wygodniejszy dostęp do bibliotek i narzędzi używanych w tych dziedzinach.
- Interfejs działający w przeglądarce: JavaScript lub TypeScript są standardowym wyborem do bezpośredniej pracy z interfejsem strony.
- Rozwój istniejącej aplikacji w Javie: pozostanie przy dotychczasowym środowisku może być korzystniejsze niż utrzymywanie kolejnego języka.
- Ścisła kontrola pamięci i opóźnień: Rust lub C++ mogą lepiej odpowiadać wymaganiom, które utrudniają zastosowanie garbage collectora.
To wskazówki, a nie ranking jakości języków. Przy wyborze uwzględnij dostępne biblioteki, doświadczenie zespołu i wymagania konkretnego programu.
Jak zacząć naukę Go?
Zainstaluj aktualną stabilną wersję zgodnie z instrukcją w oficjalnym serwisie projektu Go, potwierdzając wymagania dla swojego systemu. Następnie sprawdź instalację poleceniem go version i utwórz katalog na pierwszy projekt.
Zapisz w nim plik main.go:
package main
import "fmt"
func main() {
fmt.Println("Cześć, Go!")
}
W terminalu uruchom go mod init example/hello, aby utworzyć moduł, czyli jednostkę organizacji i zarządzania zależnościami projektu. Polecenie go run . skompiluje i uruchomi program, a go build . utworzy plik wykonywalny. Formatowanie kodu zapewnia go fmt ./..., natomiast testy uruchamia się przez go test ./....
Jako następne ćwiczenie zbuduj program sprawdzający status HTTP jednej strony. Dodaj obsługę błędów i limit czasu, a dopiero później rozszerz go o współbieżne sprawdzanie kilku adresów.
Zobacz też: Co to jest 2FA?
