
Od tłumacza: przetłumaczone . Artykuł będzie przydatny nie tylko dla początkujących programistów, ale także dla wszystkich, którzy w jakikolwiek sposób interesują się Go.
Lubię Pythona. Ten język był moim ulubionym przez ostatnie pięć lat. Jest przyjazny, efektywny i łatwy do nauki. Wykorzystywany jest praktycznie do wszystkiego: od tworzenia prostych skryptów i rozwoju aplikacji webowych po wizualizację danych i uczenie maszynowe.
Stopniowe "dojrzewanie" Go, rozbudowana społeczność oraz fakt, że coraz więcej firm zaczyna przyjmować ten język po udanych testach, skłoniły mnie do zwrócenia na niego uwagi i zagłębienia się w literaturę. Ale ten post nie dotyczy tego, co jest lepsze — Python czy Go: w sieci jest ogromna ilość porównań. Moim zdaniem, wszystko zależy od obszaru zastosowania. Zamierzam opowiedzieć o tym, dlaczego wybrałem Go, dając kilka porad i wskazówek do przydatnych zasobów dla wszystkich interesujących się tematem.
Skillbox poleca: Praktyczny kurs .
Przypominamy: dla wszystkich czytelników „Habra” — zniżka 10 000 rubli przy zapisie na dowolny kurs Skillbox z kodem promocyjnym „Habra”.

Obserwacje
Pierwszą rzeczą, którą zrobiłem na początku swojej drogi, było zapoznanie się z doskonałym oficjalnym samouczkiem “”. Umożliwia on zrozumienie składni języka.
Aby poprawić swoje umiejętności, przeczytałem również książkę “”, która pozwoliła przejść do następnego etapu — prób i błędów.
Wziąłem znane mi funkcje, których używałem w Pythonie (serializacja JSON lub praca z wywołaniami HTTP), i spróbowałem napisać je w Go. Dzięki takiemu bezpośredniemu porównaniu udało mi się wyodrębnić kluczowe różnice między językami.
Struktura projektu
Przede wszystkim Python nie wymaga specyficznej hierarchii katalogów, podczas gdy Go — tak.
Go wykorzystuje „standardową” strukturę, która jest nieco bardziej skomplikowana i wymaga więcej pracy. Z drugiej strony, w rezultacie otrzymujemy dobrze zorganizowaną podstawę kodu, gdzie używana jest struktura modułowa, a przy rozbudowie projektu kod pozostaje starannie uporządkowany.
Oficjalny samouczek “” wyjaśnia, jak zorganizować swoją pracę.
Statyczna, ścisła typizacja
Go jest statycznie typowany, co może sprawić, że osoby przyzwyczajone do dynamicznie typowanych języków, takich jak Python i Ruby, będą się czuły niekomfortowo.
Nie ma wątpliwości, że języki dynamiczne są bardziej podatne na błędy, a deweloper musi włożyć więcej wysiłku w weryfikację danych wejściowych. Przykład — funkcja, która oblicza sumę dwóch liczb całkowitych. Jeśli przekazać do funkcji łańcuch (co zdarza się całkiem często), doprowadzi to do błędu TypeError.
W Go coś takiego nie może się zdarzyć, ponieważ tutaj trzeba zadeklarować typ dla każdej zmiennej i funkcji oraz to, jaki typ zmiennej funkcja zwróci.
Na początku to irytuje: wydawało mi się, że ta cecha Go spowalnia pracę, — ale później zrozumiałem, że tak naprawdę wszystko zadeklarowane oszczędza czas, a prawdopodobieństwo błędu maleje.
Natychmiastowy współbieżność
Go ma natywną obsługę współbieżności z użyciem gorutyn i kanałów — to wygodne.
Koncept kanałów początkowo wydaje się nieco zawiły. Jednak z upływem czasu staje się bardziej zrozumiały i zaczynasz cieszyć się nowymi możliwościami, aktywnie z nimi pracując.
Oto wizualizacja wszystkiego, co powiedziano przez .
package main
func main() {
// twórz nowy kanał typu int
ch := make(chan int)
// uruchom nową anonimową gorutynę
go func() {
// wyślij 42 do kanału
ch <- 42
}()
// odczytaj z kanału
<-ch
} 
Więcej przykładów i .
Praca z JSON
Cóż, json.loads() już nie ma. W Pythonie to proste: używamy json.loads, i nie ma problemów.
Ale w Go, języku statycznie typowanym, ta operacja staje się trudniejsza.
Tutaj, używając JSON, wszystko jest z góry zdefiniowane. Każde pole, które nie pasuje do zadanej struktury, zostanie zignorowane, i to jest dobre. Można o tym myśleć jak o wcześniej uzgodnionym protokole między dwiema stronami. Dane, które otrzymujesz w JSON, powinny być oczekiwane, a pola i typy JSON są 'uzgodnione' przez obie strony.
{
"first": "Elad",
"last": "Leev",
"location":"IL",
"id": "93"
}type AccountData struct {
First string `json:"first"`
Last string `json:"last"`
Location string `json:"location"`
ID string `json:"id"`
}Oczywiście, możesz deserializować JSON bez struktur, ale w miarę możliwości należy tego unikać, biorąc pod uwagę statyczną naturę języka.
Dekodowanie JSON w GO najlepiej lub .
Nie chce ci się konwertować twojego JSON na strukturę Go? Nie ma problemu, .
Czysty kod
Kompilator Go zawsze stara się utrzymać twój kod w "czystości". Traktuje nieużywane zmienne jako błąd kompilacji. Go stosuje unikalne podejście, które pozwala systemowi rozwiązywać większość problemów z formatowaniem. W ten sposób Go uruchomi program gofmt przy zapisywaniu lub kompilacji i samodzielnie poprawi formatowanie.
Nie obchodzi cię zmienne? Dobrze! Po prostu użyj _ (podkreślenie) i przypisz je pustemu identyfikatorowi.
Mastrid-tutorialem do tej części pracy z językiem jest informacja z “”.
Wyszukiwanie odpowiedniej biblioteki i frameworków
Używałem w Pythonie frameworków i bibliotek takich jak Flask, Jinja2, Requests, a nawet Kazoo, więc obawiałem się, że nie znajdę nic odpowiedniego dla Go.
Jednak społeczność już rozwiązała te problemy: język ma własne unikalne biblioteki, które pozwalają całkowicie zapomnieć, co używałeś wcześniej.
Oto moi ulubieńcy.
Python Requests => net/http
oferuje wygodną i łatwą w użyciu implementację klienta i serwera HTTP.
Flask + Jinja2 => Gin
to framework HTTP z bardzo prostym API: parametry w ścieżce, przesyłane pliki, grupy tras ( / api / v1, / api / v2), niestandardowe formaty logów, obsługa statycznych plików, renderowanie HTML oraz naprawdę potężne niestandardowe middleware.
Oceń benchmark.
Tworzenie CLI => Cobra
to biblioteka do tworzenia potężnych aplikacji CLI, a także program do generowania aplikacji i plików poleceń.
Cobra jest używana w wielu dużych projektach Go, w tym Kubernetes, etcd i OpenShift.
Oto jeszcze kilka bibliotek, które stanowczo polecam: , i ta niesamowita lista — .
Inne przydatne zasoby
[1] — zdecydowanie powinieneś ocenić te i .
[2] .
[3] .
[4] , , — konta na Twitterze.
Podsumowując
Będąc stałym użytkownikiem Pythona przez pięć lat, obawiałem się, że przejście na Go będzie bolesne.
Ale nie: istnieją zasoby społeczności Go, które rozszerzają i uzupełniają możliwości języka, a także różne przydatne zasoby, które pomogą ci w przejściu.
Go szybko się rozwija i mam nadzieję, że Google uczyni go głównym językiem do pisania aplikacji chmurowych i infrastruktury.
Dołącz!

Skillbox poleca:
- Dwuletni praktyczny kurs .
- Edukacyjny kurs online .
- Praktyczny roczny kurs .
Źródło: habr.com
