Zadaliśmy specjalistom iTechArt kilka poważnych pytań dotyczących frontendu - zobaczcie, jak odpowiedzieli!
Jest coś urzekającego w Go. Nic dziwnego, lubimy wszystko, co powstało, żeby uprościć nam życie – a po to w końcu inżynierowie Google stworzyli ten język. O Go mówi się jako o jednym z najbardziej wartych nauki języków programowania.
Stack Overflow, który przebadał deweloperów z niemal każdego kraju na Ziemi twierdzi, że niecałe 10% programowało w Go w 2021 roku. Za to Go jest w Top 10 jeśli chodzi o przewagę tych, którzy go lubią nad tymi, którzy go nienawidzą (najprościej mówiąc). To dobrze, bo jeśli chodzi np. o Javę, to więcej programujących w tym języku deweloperów wolałaby go zmienić. A na co? Jednym ze wskazań jest Go.
Czemu ja na niego postawiłem?
Nowoczesny i perspektywiczny
Go jest młodym językiem programowania, ale szybko zdobył dobrą pozycję na rynku. Coraz więcej firm zaczyna go używać, a część zdecydowała się nawet na przepisanie istniejącego kodu (jak Uber, Dropbox, Badoo, SoundCloud, Twitch). Kiedy zaproponowałem użycie Go w mojej poprzedniej firmie i wprowadziłem pierwszy serwis, moi menedżerowie byli pod wrażeniem wydajności i jakości. Po tym zaczęliśmy używać Go do wszystkich nowych komponentów. Jeśli przeanalizujecie trendy, zobaczycie, że przyszłość należy do Go.
Go gromadzi najlepsze cechy innych języków programowania
Z jednej strony Go daje możliwości programowania niskopoziomowego, takie jak na przykład ręczne zarządzanie pamięcią. Z drugiej strony, jest łatwy w użyciu, tak jak języki interpretowane. Ma w sobie wydajność C++, prostotę Pythona, mnogość zastosowań oraz wieloplatformowość Javy, jak też funkcjonalność w zakresie tworzenia aplikacji webowych na poziomie PHP. Społeczność Go jest ogromna, ciągle rośnie i możemy znaleźć tony bibliotek do wszystkich możliwych zastosowań.
![]()
Niezawodność
Go jest językiem kompilowanym i statycznie typowanym. W praktyce oznacza to, że trudno o pomyłkę w kodzie. Kompilator sprawdza wszystkie typy danych oraz integralność kodu. W językach interpretowanych (takich jak Python czy JavaScript), nawet unit testy nie chronią przed ewentualnymi błędami. Z mojego doświadczenia wynika, że jeśli projekt w Go został skompilowany, najprawdopodobniej będzie działał tak, jak się tego spodziewamy.
Kolejną wartą uwagi rzeczą jest obsługa błędów. Niemal każda funkcja zwraca błędy wraz z wynikami, co zmusza programistę do sprawdzenia, czy błąd został zwrócony i prawidłowego z nim postępowania. Tymczasem w najbardziej popularnych językach programowania można zwyczajnie zapomnieć o wychwyceniu i kontroli wyjątków.
Mikroserwisy
Moim zdaniem to właśnie Go jest najlepszym językiem dla mikroserwisów. Ma imponujący zestaw gotowych bibliotek. Filozofia Go zachęca do tego, żeby nie używać frameworków, przy czym Go umożliwia nam tworzenie prostych, czystych i lekkich aplikacji bazujących na kodzie natywnym. Go ma doskonałe wsparcie systemu gRPC, co pozwala z łatwością włączać serwisy pisane w tym języku w każdą architekturę mikroserwisów. Daje również imponujące możliwości skalowania i implementacji obliczeń równoległych.
Wydajność zespołu
Go zachęca do pisania transparentnego i samodokumentującego się kodu i nieużywania frameworków. Pozwala to uniknąć niejasności i w prosty sposób onboardować nowego członka zespołu. Jest też językiem łatwym do nauki. Jeśli przechodzisz do Go z języka dynamicznie typowanego, konieczność dbania o typy danych może być irytująca, ale w większości przypadków prostota Go jest porównywalna z językami wysokopoziomowymi. Jeśli chodzi zaś o typy danych, bardzo szybko spodoba Ci się osiągnięta niezawodność.
Go zachwyca szybkim czasem kompilacji i pozwala cieszyć się procesem debugowania. Może być kompilowany i cross-kompilowany na wszystkich popularnych systemach operacyjnych. Ma też wbudowany garbage collector, co pozwala programiście skupić się na logice biznesowej. Zazwyczaj kiedy potrzebuję wskoczyć w nowy projekt, mogę to zrobić bardzo szybko, bo nie muszę studiować wszystkich detali frameworku, na którym oparta jest aplikacja. Go sprzyja prostemu, czystemu i ujednoliconemu stylowi programowania.
Obliczenia równoległe
Go serwuje nam najlepsze podejście do współbieżnego uruchamiania kodu. Deweloperzy Go zaimplementowali w tym celu lekkie wątki goroutines. Zużywają one bardzo mało pamięci i pracują szybko w porównaniu ze standardowymi wątkami. Możesz uruchomić dosłownie tysiące goroutines jednocześnie. Ich synchronizacja jest czystą przyjemnością, ponieważ Go ma pięknie zaprojektowane kanały do budowania komunikacji między nimi. Programista musi jednak pamiętać o ochronie współbieżnego dostępu do danych, inaczej łatwo o race condition.
Pozwólcie, że pokażę przykład jak prosto uruchamia się wątki goroutines w porównaniu z wątkami w Java:
Java:
public class MyThread extends Thread {
public void run(){
System.out.println("My Thread is running");
}
}
MyThread myThread = new MyThread();
myTread.start();
Go:
go func() {
fmt.Println(“My Goroutine is running”)
}
Wydaje mi się, że to powinno Wam wystarczyć jako rekomendacja do nauki ;)
Od czego możecie zacząć?
1. Zaczynanie od podstaw
Fajna seria artykułów:
https://medium.com/wesionary-team/getting-started-with-golang-ad1e9c8121ab
Jest ich łącznie 5, linki znajdziecie na dole.
Oficjalny tutorial i krótki przewodnik również mogą być przydatne:
https://go.dev/doc/tutorial/getting-started
https://go.dev/tour/welcome/1
2. Dalsze kroki
Świetne filmiki z kodowaniem, mocno rekomenduję:
https://www.youtube.com/c/JustForFunc/videos
Ten gość wypuszcza świetne artykuły dla gophers, którzy juz są zaznajomieni z językiem:
https://medium.com/@benbjohnson
Mój poprzedni team leader, który jest doświadczonym deweloperem Go, zarekomendował mi poniższe podcasty. Trochę dziwny format, ale jeśli się komuś spodoba - warto przejrzeć:
3. Dodatkowe informacje
Oficjalny styl kodowania. Nudne, ale warto znać:
https://go.dev/doc/effective_go
Katalog zewnętrznych bibliotek, które pokrywają większość wymagań: