Go (GoLang) to kompilowany język programowania stworzony w Google, który wyróżnia się prostą składnią, szybkim budowaniem i wbudowaną obsługą współbieżności. Najczęściej służy do pisania usług API, narzędzi wiersza poleceń i infrastruktury chmurowej, a używają go m.in. Google, Uber, Cloudflare i Allegro. Ofert pracy jest niewiele (ok. 1% rynku IT w Polsce), ale należą do najlepiej płatnych, a większość z nich dotyczy osób na poziomie mid i senior.
Go, w rozmowach często nazywany GoLangiem, to język, który rzadko pojawia się w pierwszych tutorialach, a bardzo często w ofertach na backend i DevOps. Poniżej dowiesz się, jak go zainstalować, gdzie jest używany i dlaczego, które firmy go wybierają i czy opłaca się go uczyć pod kątem pracy.
Czym jest Go i skąd się wziął?
Go to statycznie typowany, kompilowany język ogólnego przeznaczenia. Powstał w Google, a jego twórcami są Robert Griesemer, Rob Pike i Ken Thompson. Został pokazany publicznie w 2009 roku, a wersja 1.0 ukazała się w 2012. Nazwa oficjalnie brzmi „Go”, ale „Golang” (od adresu golang.org) utrwaliło się w wyszukiwarkach i w ofertach pracy, więc spotkasz obie.
Założenie było proste: język ma być na tyle mały, żeby dało się go poznać w kilka tygodni, a jednocześnie wystarczająco szybki i wygodny do pisania serwerów. Efektem jest składnia z niewielką liczbą słów kluczowych, jeden oficjalny formater kodu i kompilacja do jednego pliku wykonywalnego.
Jak zainstalować Go i uruchomić pierwszy program?
Aktualną wersję pobierzesz z go.dev/dl. W momencie pisania tego artykułu (listopad 2026) najnowsza stabilna to Go 1.27.3. Wybierz sposób dla swojego systemu:
| System | Jak zainstalować | Uwagi |
|---|---|---|
| macOS | instalator .pkg (Apple silicon lub Intel) albo brew install go | po instalacji otwórz nowy terminal |
| Windows | instalator .msi (64-bit) | instalator sam dodaje Go do PATH |
| Linux | archiwum .tar.gz rozpakowane do /usr/local | dopisz /usr/local/go/bin do PATH |
Instalację sprawdzisz w terminalu:
go version
Powinieneś zobaczyć numer zainstalowanej wersji. Teraz pierwszy program. Utwórz pusty folder, wejdź do niego i zainicjuj moduł (moduł to w Go jednostka zarządzania zależnościami, opisana w pliku go.mod):
mkdir hello
cd hello
go mod init hello
Następnie utwórz plik main.go:
package main
import "fmt"
func main() {
fmt.Println("Cześć, Go!")
}
Uruchom go jednym poleceniem, a kiedy będziesz chciał dostać gotowy plik wykonywalny, zbuduj go:
go run .
go build -o hello .
./hello
go run kompiluje i od razu uruchamia program, a go build zapisuje binarkę, którą możesz skopiować na serwer bez instalowania Go. To jeden z głównych powodów, dla których język lubią zespoły wdrażające aplikacje w kontenerach.
Jak wygląda współbieżność w Go? Czym jest goroutine?
Największą zaletą Go jest współbieżność wbudowana w język. Goroutine to lekki wątek zarządzany przez środowisko uruchomieniowe Go: startujesz go słowem go przed wywołaniem funkcji. Goroutine komunikują się przez kanały (channels).
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
fmt.Println("zadanie", n)
}(i)
}
wg.Wait()
}
sync.WaitGroup czeka, aż wszystkie goroutine skończą pracę. Kolejność wypisanych linii nie jest gwarantowana, bo zadania działają równolegle: u nas po uruchomieniu zobaczyliśmy zadanie 3, zadanie 1, zadanie 2.
Dlaczego mój program kończy się błędem deadlock?
To najczęstsza pułapka po pierwszym kontakcie z kanałami. Kanał bez bufora działa jak przekazanie z ręki do ręki: wysyłający czeka, aż ktoś odbierze. Jeśli wysyłasz i odbierasz w tej samej goroutine, nikt nigdy nie odbierze:
package main
import "fmt"
func main() {
ch := make(chan int)
ch <- 42
fmt.Println(<-ch)
}
Program zatrzymuje się z komunikatem fatal error: all goroutines are asleep - deadlock! i kodem wyjścia 2. Środowisko Go wykrywa, że wszystkie goroutine czekają i żadna nie ruszy. Są dwa proste wyjścia. Pierwsze to wysłanie w osobnej goroutine, żeby ktoś mógł odebrać:
ch := make(chan int)
go func() {
ch <- 42
}()
fmt.Println(<-ch)
Drugie to kanał z buforem na jedną wartość, czyli make(chan int, 1), który pozwala wysłać bez czekania. Oba warianty wypisują 42. Bufor traktuj jednak ostrożnie: często tylko ukrywa błąd w projekcie, bo odsuwa moment, w którym program znów utknie. Zacznij od pytania, kto ma odbierać tę wartość.
Gdzie Go jest najczęściej wykorzystywany?
Według oficjalnej ankiety Go Developer Survey 2025 (5 379 respondentów) dwa główne zastosowania to narzędzia wiersza poleceń (CLI) i usługi API, a 55% programistów buduje oba rodzaje oprogramowania. Ponad jedna trzecia pisze też narzędzia do infrastruktury chmurowej.
| Obszar | Po co Go | Przykłady |
|---|---|---|
| Usługi API i mikroserwisy | szybkie działanie, mała ilość pamięci, łatwa współbieżność | Monzo, ByteDance (ok. 70% mikroserwisów w Go), SIXT |
| Narzędzia CLI | jeden plik wykonywalny, bez instalowania środowiska | narzędzia DevOps |
| Infrastruktura chmurowa | kompilacja pod Linuksa, kontenery | Docker, Kubernetes, Terraform |
| Systemy o dużym ruchu | niskie opóźnienia | Twitch, Cloudflare, Netflix (cache) |
Warto zauważyć, że 96% ankietowanych wdraża swoje programy na systemy oparte na Linuksie, w tym kontenery. Go bardzo rzadko jest wyborem do aplikacji desktopowych, a w pracy z danymi i uczeniem maszynowym ustępuje Pythonowi.
Dlaczego firmy wybierają Go?
Z historii opisanych w oficjalnych case studies wynika kilka powtarzalnych powodów:
- Szybkość i niskie zużycie zasobów. Dropbox przenosił krytyczne części backendu z Pythona, a Armut Labs przeszło z C# i .NET Core, żeby skrócić czas odpowiedzi i zmniejszyć zużycie zasobów.
- Prosta współbieżność. Obsługa tysięcy równoległych połączeń nie wymaga tu skomplikowanych bibliotek.
- Łatwe wdrożenie. Jedna binarka, brak zależności na serwerze.
- Czytelny kod w dużych zespołach. Mała liczba konstrukcji sprawia, że kod pisany przez różne osoby wygląda podobnie.
Jest też cena. W ankiecie programiści jako największe trudności wymieniali stosowanie idiomów i dobrych praktyk (33%) oraz brak funkcji znanych z innych języków (28%). Go celowo jest oszczędny, więc czasem piszesz więcej kodu niż w Pythonie.
W jakich firmach używa się Go?
Na stronie go.dev w sekcji case studies wymieniono m.in.:
| Firma | Do czego używa Go |
|---|---|
| produkty i usługi w wielu zespołach | |
| Uber | AresDB, silnik analityczny czasu rzeczywistego |
| Cloudflare | kompresja HTTP, DNS, SSL |
| Netflix | cache danych aplikacji na dyskach SSD |
| PayPal, American Express, Capital One | usługi płatnicze i API |
| Dropbox | infrastruktura backendowa |
| Twitch, Riot Games | systemy czatu, wideo i backend gier |
| Monzo | mikroserwisy bankowe |
| Allegro | szybki serwis cache z milionami wpisów |
Z polskich firm najlepiej widoczne jest Allegro, które ogłasza oferty na stanowiska Software Engineer (Go) w Warszawie i Poznaniu. Poza nim Go znajdziesz w software house'ach i bankowości, ale lista konkretnych pracodawców zmienia się szybko, więc najlepiej sprawdzić ją w bieżących ofertach.
Jak wygląda rynek pracy dla programisty Go?
Rynek jest mały, ale dobrze płatny. Według Raportu Wynagrodzeń IT 2026 serwisu Just Join IT (dane za 2025 rok):
| Wskaźnik | Wartość |
|---|---|
| Udział w ofertach IT | ok. 1,12% |
| Średnia oferowana pensja (UoP) | 22 250 zł brutto, najwyżej w całym raporcie |
| Mid | 19 500 zł (UoP), 20 580 zł (B2B) |
| Senior | ok. 25 000–26 550 zł |
| Junior | brak danych w raporcie |
Z tych liczb wynikają trzy wnioski:
- Ofert jest niewiele, więc konkurencja o każdą jest realna, mimo że rekrutujących jest mało.
- Dominują poziomy mid i senior. Dla juniorów raport nie podaje danych, bo takich ofert jest zbyt mało.
- Wysoka średnia częściowo wynika ze struktury ofert. Ponieważ większość to seniorskie stanowiska backendowe, średnia jest wyższa niż w całym IT. To nie znaczy, że początkujący zacznie od takiej stawki.
Raport opisuje oferowane widełki, a nie faktyczne zarobki, dlatego traktuj te liczby orientacyjnie. Jeśli szukasz pracy w IT w ogóle, zajrzyj do artykułu o tym, gdzie szukać pracy w IT.
Czy Go warto się uczyć jako pierwszego języka?
Zwykle nie jest to najlepszy pierwszy język, ale bardzo dobry drugi. Potwierdza to sama społeczność Go: w ankiecie z 2025 roku 81% respondentów miało więcej doświadczenia zawodowego niż doświadczenia w Go, a ponad 80% poznało Go dopiero po rozpoczęciu kariery. Go zwykle przychodzi więc jako kolejny język, nie pierwszy.
Początkujący szybciej znajdą pierwszą pracę, znając Pythona lub JavaScript, bo ofert jest wielokrotnie więcej, a z raportu Just Join IT widać, że oferty Go to głównie poziomy mid i senior. Go przydaje się dopiero, gdy rozumiesz już, czym jest serwer, API i baza danych. Jeśli dopiero wybierasz drogę, zacznij od kursu Python online, a framework do API porównasz w artykule Django vs Flask vs FastAPI. W devmentor.pl nie ma dziś ścieżki ani modułu poświęconego Go.
Co dalej, gdy już znasz Go? Dlaczego programiści Go szukają wyzwań w Pythonie?
Droga często idzie w drugą stronę, niż myślą początkujący: to osoby, które programują już w Go, sięgają po Pythona, gdy szukają nowych wyzwań. W tej samej ankiecie programiści Go wskazywali, że poza Go lubią pracować w Pythonie, Rust i TypeScripcie. Python wygrywa tam, gdzie Go jest słabszy: w pracy z danymi, uczeniu maszynowym, automatyzacji i szybkim prototypowaniu, a Go stoi za usługą, która ma to wszystko obsłużyć pod dużym ruchem. Wiele zespołów łączy oba języki: Python do eksperymentów i modeli, Go do usługi, którą klienci faktycznie odpytują.
Dla kogoś, kto zna Go, Python bywa zaskakująco inny. Zamiast jawnych typów masz opcjonalne adnotacje, zamiast if err != nil masz wyjątki, a współbieżność opiera się o asyncio zamiast goroutine. Ten sam pomysł, czyli trzy zadania po 200 ms uruchomione jednocześnie, wygląda w Pythonie tak:
import asyncio
import time
async def fetch(id: int) -> str:
await asyncio.sleep(0.2)
return f"odpowiedź {id}"
async def main() -> None:
start = time.perf_counter()
results = await asyncio.gather(*(fetch(i) for i in range(1, 4)))
print(results, round(time.perf_counter() - start, 1))
asyncio.run(main())
W Go odpowiednikiem jest kilka goroutine i WaitGroup. Oba programy kończą się po około 200 ms, a nie po 600 ms, bo zadania czekają równolegle. Różnica jest w modelu: w Pythonie funkcje, które czekają, oznaczasz słowem async i wywołujesz przez await, a w Go po prostu startujesz je słowem go. Jeśli chcesz zobaczyć, jak ten styl wygląda w prawdziwym backendzie, zajrzyj do artykułu Django vs Flask vs FastAPI, gdzie porównujemy frameworki także pod kątem równoległych zapytań.
Jakie błędy popełniają początkujący w Go?
W pytaniach na Stack Overflow powtarzają się trzy tematy:
- Deadlock w goroutine. Komunikat
all goroutines are asleep - deadlock!pojawia się, gdy program czeka na dane z kanału, których nikt nie wyśle (opisujemy go wyżej). - Problemy z modułami.
go runpoza folderem zgo.modkończy się komunikatemgo.mod file not found in current directory or any parent directory, a brakujący pakiet daje dziśno required module provides package …(starsze poradniki pokazują inne brzmienie). Uważaj też na nazwę modułu: nazwanie gocmpalbo inaczej niż pakiet biblioteki standardowej kończy się błędemambiguous import, bo Go widzi dwa pakiety o tej samej nazwie. nilw interfejsie. Interfejs zawierający wskaźniknilnie jest równynil: funkcja zwracająca typerror, w której zwrócisz zmiennąvar e *MyErrbez wartości, dajeerr == nilrównefalse. Potrafi to zaskoczyć nawet doświadczonych programistów.
Od czego zacząć naukę Go?
Zacznij od oficjalnego A Tour of Go, czyli interaktywnego kursu w przeglądarce, który nie wymaga instalacji. Później napisz małe API w pakiecie net/http z biblioteki standardowej i krótkie narzędzie CLI. Dwa takie projekty w portfolio mówią o Go więcej niż certyfikat.


