iTechArt logo

Aliaksandr Reshatniak: Dlaczego postawiłem na Go?

Development & QA

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. 

Alex_Reshatniak_cr.jpg

Aliaksandr Reshatniak:

Head of Golang Family

Alex w branży IT pracuje od 2012 roku, od 2017 z językiem Go. W tej chwili buduje specjalizację Golang w iTechArt w Polsce.

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ć: 

https://changelog.com/gotime 

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ń: 

https://awesome-go.com/