Nastoletni
Programiści

Logo Nastoletnich Programistów

Język Go – czy warto? Wprowadzenie.

Witam! Nigdy jeszcze nie pisałem żadnego bloga, więc proszę o wyrozumiałość.

Zajmę się tematem języka Go. Czym on jest, dlaczego warto się go nauczyć, jak stworzyć w nim prosty program „Hello World”, jak stworzyć sobie środowisko do pracy z nim i zamieszczę parę skryptów do zautomatyzowania sobie pracy.

Pragnę jeszcze tylko nadmienić, że ten wpis jest skierowany do użytkowników, którzy już potrafią programować w jakimś języku, ale jeśli nie potrafisz, to nie martw się. Do wszystkiego zrobiłem odnośniki, więc nawet jeżeli nie zrozumiesz tego wpisu, to i tak coś stąd wyniesiesz.

Czym jest Go i co potrafi?

Go (często nazywany Golang’iem dla odróżnienia od słowa „go”) jest językiem programowania opracowanym przez programistów z Google: Roberta Griesemera, Roba Pikea oraz Kena Thompsona.

Łączy w sobie łatwość pisania aplikacji charakterystyczną dla języków dynamicznych (np. Pythona, Lispa, C#’a oraz JavaScriptu) z wydajnością języków kompilowanych (np. C, C++).

Kompilacja w Go po pierwszym razie jest bardzo szybka w porównaniu do np. kompilacji w C++. Język ten posiada również wbudowany Garbage Collector, który bardzo ułatwia zarządzanie zasobami. Składnia Golang’a i budowa kodu nad wyraz przypomina to co znamy z JavaScriptu. Nie ma tu klas, ponieważ byty, które przyjdzie nam zadeklarować, to instancje struktur z przypisanymi do ich typów metodami – czyli deklarujemy typ jakiejś struktury, a następnie przypisujemy do jej typu różne metody. Przypomina to trochę tworzenie klasy ze zmiennymi, ale bez metod w C#, a następnie dodanie do tej klasy metod rozszerzeń. W Go można także tworzyć literały struktur, które bardzo przypominają literały obiektów z JavaScriptu. Konstruktorów i destruktorów tu nie ma, ale możliwa jest ich sztuczna implementacja poprzez funkcje czy też, jak już wspomniałem, metody przypisane do typów struktur z wykorzystaniem instrukcji defer. Obiektowość w Golangu realizowana jest za pomocą interfejsów.

Go do bólu ułatwia również zrównoleglanie wywołań. Nie trzeba zajmować czasu na wątki, rezerwacje zasobów, mutexy i resztę tego tałatajstwa. Zamiast tego Golang oferuje nam tzw. „goroutines” (które pozwalają na asynchroniczne uruchomienie danej funkcji poprzez dodanie przed jej wywołaniem instrukcji go) oraz daje nam kanały, które w bardzo dużym uproszczeniu działają jak wskaźniki. Możesz coś do nich wrzucić w jednym procesie i odczytać w innym. Go wspiera UTF-8, więc nie ma żadnych problemów z polskimi znakami.

Jak zainstalować Golanga?

Jeżeli doszedłeś/aś do tego etapu, to prawdopodobnie przekonał Cię mój wstęp. Bardzo mnie to cieszy. Teraz pokażę Ci jak zainstalować Golanga. Zrealizuję to w formie instrukcji.

  1. Wejdź na główną stronę projektu i przejdź do strony „Downloads”. 
  2. Przejdź do „Stable versions” i pobierz najnowszą, stabilną wersję .ZIP na twój komputer. 
  3. Przerzuć folder „go” z paczki ZIP do folderu C:\. U mnie był już folder ze starą wersją SDK do Golanga, więc ja tylko sobie zaktualizowałem.
  4. Teraz musisz dodać ścieżkę do C:\go\bin do zmiennych środowiskowych. Jeżeli wiesz jak to zrobić, możesz pominąć do punku 10.
  5. Wejdź we właściwości Komputera.
  6. Otwórz „Zaawansowane ustawienia systemu”.
  7. Otwórz „Zmienne środowiskowe”.
  8. Jeżeli nie masz zmiennej „Path”, utwórz ją za pomocą opcji „Nowa…”. Ja jedynie edytuje.
  9. Wciśnij przycisk „Nowy” i wpisz C:\go\bin. (Jeżeli jesteś na win 7/8, to wystarczy, że wkleisz tą ścieżkę i dodasz za nią znak ‚;’ do oddzielania ścieżek.
  10. Otwórz konsolę systemową (skrót WIN+R, wpisz cmd i wciśnij enter) i wpisz go version. Jeżeli pokazuje Ci się podobna informacja do mojej, oznacza to, że wszystko jest okej.

Jak skonfigurować sobie środowisko do pracy?

Wiesz już co to Go i potrafisz go poprawnie zainstalować. Czas napisać pierwszy program!

Pamiętasz jak napisałem, że zamieszczę parę skryptów do zautomatyzowania sobie pracy? Oto one:

goCreate.bat nazwaProjektu – służy do tworzenia nowych projektów

goPackage.bat nazwaPaczki – tworzy nowe paczki

goHere.bat – kiedy jesteś w folderze projektu i uruchomisz ten skrypt, projekt będzie gotowy do pracy, a kompilator będzie widział wszystkie twoje pliki.

createGoFile.bat – goPackage i goCreate wykorzystują go do tworzenia potrzebnych plików.

Wrzuć te pliki do folderu z twoimi skryptami (jeżeli takiego nie masz, stwórz go), a następnie dodaj ścieżkę do tego folderu do zmiennych środowiskowych („PATH”).

Dlaczego daje Ci te skrypty?

Projekty w Golangu należy zapisywać projekty w specjalnej strukturze z folderów (więcej tutaj). Ręczne tworzenie owej struktury za każdym razem jest niewygodne i może sprawiać problemy początkującym w Go.

Twój pierwszy program w Go.

Aby stworzyć projekt otwórz konsolę i wpisz goCreate "tutaj nazwa projektu" (możesz to zrobić poprzez przytrzymanie shiftu i wciśnięcie prawego klawisza myszy, a następnie wybranie opcji „Otwórz okno polecenia tutaj”). Gdy to zrobisz, wpisz go install i voilà, napisałeś Hello World w golang. Czy napewno? No nie do końca. Zrobiły to za Ciebie moje skrypty, jednak zapewne widzisz, że w folderze /src/ powstał folder główny projektu wraz z plikiem main.go. Tak jak w innych językach programowania ten plik steruje całym programem. Zawarta jest w nim funkcja main, która wywoływana jest jako pierwsza.

Struktura pliku main.

Przyjrzyjmy się strukturze naszego pliku. Na początku pliku zawsze opisane jest, do jakiego pakietu należy ten plik. Pakietów może być wiele. To coś jak przestrzenie nazw w C++ i C#. Deklaruje je się po prostu pisząc nazwę pakietu. Należy zapamiętać jedynie by zawsze trzymać pliki z danego pakietu w folderze takim jaka jest nazwa jego pakietu. Czyli, gdy dla pliku X.go zadeklarowany jest pakiet Y, to należy umieścić pliki, które mają zadeklarowany ten pakiet w folderze o nazwie Y. W przeciwnym wypadku można napotkać na problemy.

W środku zapisane są importy. W naszym pliku jest tylko jeden import – import fmt. Import to instrukcja preprocesora, która wkleja nam po prostu kod z danego pakietu (tak samo jak słówko „include” w C++ albo „using” w C#). Pakiet „fmt” to główny pakiet Input/Output języka Go. Coś jak iostream.

Na końcu jest już tylko sama funkcja main. Wygląda na bardzo prostą. Nie ma zapisanego typu, który zwraca. Między klamrami jest jedynie instrukcja fmt.Println("Hello World"). Ma ona za zadanie wypisać tekst na ekranie. Zawsze, gdy chcemy wywołać funkcje z danego pakietu, to nazwę funkcji należy poprzedzić nazwą pakietu i operatorem wyłuskania (kropki). Po skompilowaniu i uruchomieniu program wypisuje na ekranie „Hello World”.

Podsumowanie

Jak widać Golang to bardzo prosty i intuicyjny język. Nie miałem zamiaru nauczyć Cię go tu całego, a jedynie pokazać Ci namiastkę tego jak on wygląda w praktyce i co on potrafi. Moim zdaniem jest to świetny język nawet na start i warto się go nauczyć. Nie jest trudny do opanowania i do użytkowania. Warto też się go nauczyć chociażby dlatego, że na każdej platformie ten sam kod Golanga kompiluje się i działa tak samo, a tych platform jest sporo. Posiada on ogrom własnych bibliotek, a w dodatku społeczność, która go rozwija tworzy cały czas nowe.

Jeżeli chciałbyś/chciałabyś dowiedzieć się więcej lub nauczyć się tegoż wspaniałego języka programowania, to polecam Ci stronę.

STRONK

Ten autor jeszcze nie podzielił się czymś o sobie.

Zobacz wszystkie posty tego autora →

Komentarze

  • „Garbage Collector który bardzo ułatwia zarządzanie zasobami”
    A jak sprawa ma się z native bufferami? Np. Java widzi w nich jedynie małe obiekty i kończy się to często wyjątkiem out of memory (dlatego m.in. tak rzadko tworzone są gry w Javie). I języków z GC (D) lub czymś podobnym jest na pęczki, w C++ jest to nawet lepiej zrealizowane inteligentnymi wskaźnikami.

    >Wpis z nazwą „Język Go – czy warto? Wprowadzenie.”.
    >W środku większość stanowi opis instalacji na jakimś upośledzonym systemie.

    „Struktura pliku main.”
    Tu powinien być najciekawszy kawałek, który mógłby rzeczywiście przekonać do Go (dobra, nie, ale i tak mógłby być ciekawy) a dostałem 2 akapity z częściowym opisem Hello World, o języku dalej nie wiem absolutnie nic jeśli chodzi o praktyczne programowanie i wygląd kodu (znaczy ja wiem, ale ktoś kto nie miał styczności z Go – nie). I jeszcze w podsumowaniu „Jak widać Golang to bardzo prosty i intuicyjny język”. „Jak widać”.
    XD

    „a w dodatku społeczność”
    Te 3 osoby?

    „dowiedzieć się więcej lub nauczyć się tegoż wspaniałego języka programowania, to polecam Ci tą stronę.”
    Też mam coś na temat tego _wspaniałego_ języka programowania.
    https://kaushalsubedi.com/blog/2015/11/10/golang-sucks-heres-why/

    Go był (nawet jest) bardzo ładnym eksperymentem, ale na tym jego zalety się kończą. Osobiście z nowatorskich języków, które dopiero wchodzą do użycia (jeśli będą miały szczęście) polecam D.

    • STRONK

      Pisząc ten post nie chciałem nauczyć czytelników jak pisać programy w Go, tylko chciałem powiedzieć jakie ten język ma możliwości i trochę go ludziom przybliżyć, tak by z tych „trzech osób” zrobiło się ich trochę więcej (może kogoś przekonam i zajrzy na link, który podałem i się wkręci…). Przyznam szczerze, że zanim nie napisałeś o native bufferach, to nawet nie miałem pojęcia, że takie coś istnieje (pewnie dlatego, że nie cierpię javy..). Przykro mi, że nie spodobał Ci się mój post. „o języku dalej nie wiem absolutnie nic jeśli chodzi o praktyczne programowanie i wygląd kodu” – Masz rację, powinienem na samym początku napisać, że nie jest to poradnik jak pisać programy w Go (tzn. napisałem, że pokażę jak stworzyć „Hello World”, ale chodziło mi o pokazanie tego na podst. tychże skryptów, które tam zamieściłem), mój błąd. Co prawda w temacie jest napisane, że to tylko wprowadzenie, ale potem już wyraźnie stoi, że pokażę, jak stworzyć w nim „Hello World”. Każdy język ma tak naprawdę swoje wady i zalety, a ja chciałem przedstawić zalety Go (co do tego linku). Pozdro i wesołych świąt. 😉

      • STRONK

        Aha no i ten. W poscie prosiłem wyrozumiałość na wszelkie błędy, bo to mój pierwszy post. xd

      • „(pewnie dlatego, że nie cierpię javy..”
        To nie tylko Java, takie bufory trzymające surowe dane są w praktycznie każdym języku programowania.

        „Masz rację, powinienem na samym początku napisać, że nie jest to poradnik jak pisać programy w Go”
        Nie oczekiwałem poradnika opisującego jak pisać programy w Go, tylko wpisu z którego rzeczywiście czegoś bym się dowiedział. Teoria z pierwszych kilku akapitów sprawdza się dla wielu języków programowania, chcąc rozważyć czy zainteresować się Go wolałbym wiedzieć jak wygląda zarys składni itp., ten opis Hello Worlda był albo wybrakowany, albo zbędny.