Moja droga od Pythona do Go — dzielę się poradami i zasobami

Moja droga od Pythona do Go — dzielę się poradami i zasobami

Od tłumacza: przetłumaczone dla was artykuł Ilada Leeva na temat przejścia z Pythona na Go. 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 Programista Pythona od zera.

Przypominamy: dla wszystkich czytelników „Habra” — zniżka 10 000 rubli przy zapisie na dowolny kurs Skillbox z kodem promocyjnym „Habra”.

Moja droga od Pythona do Go — dzielę się poradami i zasobami

Obserwacje

Pierwszą rzeczą, którą zrobiłem na początku swojej drogi, było zapoznanie się z doskonałym oficjalnym samouczkiem “Tour Of Go”. Umożliwia on zrozumienie składni języka.

Aby poprawić swoje umiejętności, przeczytałem również książkę “Go for Python Programmers”, 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 “How to Write Go Code” 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 Iwana Daniliuka.

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
}

Moja droga od Pythona do Go — dzielę się poradami i zasobami

Więcej przykładów tutaj i tutaj.

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 wyjaśnione w tym poście lub tutaj.

Nie chce ci się konwertować twojego JSON na strukturę Go? Nie ma problemu, ten narzędzie zrobi to za ciebie.

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 “Effective Go”.

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

net/http oferuje wygodną i łatwą w użyciu implementację klienta i serwera HTTP.

Flask + Jinja2 => Gin

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ń ten benchmark.

Tworzenie CLI => Cobra

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: Viper, Gonfig i ta niesamowita lista — Awesome-Go.

Inne przydatne zasoby

[1] Francesc Campoy  —  zdecydowanie powinieneś ocenić te kanał YouTube i profil na GitHubie.

[2] GopherCon — wideo.

[3] Przykłady webowe Go.

[4] Golang Weekly, Gopher Academy, Golang News — 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!

Moja droga od Pythona do Go — dzielę się poradami i zasobami

Skillbox poleca:

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster