od Podstaw
6 godz. 26 min · Go · Full-stack i Programowanie
Piotr KrzesajW Go wszystko opiera się o typy. Czym one są? Tak zwane typy proste(string, int, float itd.) to tylko początek, interfejsy, struktury i nie tylko. Pokażę Ci jak używać wielu wątków Go i jakie są sposoby komunikacji między nimi, a także opowiem i pokażę na praktycznych przykładach jakie zagrożenia niesie ze sobą wykorzystywanie wielowątkowości.
W Go nie mamy obiektowości znanej z wielu innych języków. Posiada zalążki obiektowości ale sprawia to wielu osobom problemy jak podejść do architektury aplikacji. Nauczę Cię jak podejść do funkcyjności w taki sposób aby wciąż nawet duże aplikacje były łatwo rozwijalne lub co ważniejsze, była możliwość podzielenia ich na mniejsze mikroserwisy gdy zajdzie taka potrzeba.
Wśród programistów można usłyszeć głosy że w Go wielowątkowość jest świetnie rozwiązana i trudno się z tym nie zgodzić ale warto pamiętać że nasze mózgi działają jednowątkowo i często pomijamy zagadnienia takie jak wyścig wątków, deadlock i inne wyzwania, które stawia przed nami praca na dzisiejszych procesorach. Pokażę i wytłumaczę Ci w praktyce większość z nich i jak sobie z nimi radzić i na co uważać. Jeśli nie pracowałeś z językami wielowątkowymi to ta sekcja jest specjalnie dla Ciebie.
Zastanawiałem się wiele razy czy nie istnieje taka technologia w której piszę sobie jeden pliczek i z tego pliku do każdego języka mogę wygenerować sobie klienta i serwer jedną komendą. To jest w wielkim skrócie GRPC, nie musisz się przejmować czy używasz HTTP 1.1/2.0, czy używasz websocketów do transmisji, czy przesyłasz dane w formacie JSON, XML, Protobuf, czy jest moje API kompatybilne wstecz. Tym wszystkim zajmuje się GRPC. Wyjaśnię Ci czym dokładnie jest, dlaczego jest super i wreszcie jak tego używać razem z językiem Go. Napiszemy praktyczny projekt chatu w którym wykorzystamy funkcję server-streaming.
Pisząc aplikację chcemy aby uruchamiała się ona tak samo niezależnie czy uruchamiamy ją na Linuxie, macOS czy na Windowsie i z pomocą przychodzi nam Docker. Pokażę Ci jak z gotowej aplikacji napisanej w Go stworzyć obraz Dockerowy aby móc go uruchamiać na swoim komputerze bądź serwerze. Pokażę Ci również jak nasz obraz Dockerowy połączyć z bazą danych za pomocą Docker Compose aby móc cieszyć się działającą aplikacją uruchamianą jedną komendą.
Kurs Go nie mógłby obejść się bez serwera HTTP stworzonego tylko z pomocą biblioteki wbudowanej w język Go. Dokładnie tak, nie musisz instalować nic poza językiem i już możesz tworzyć serwery co jest świetną wiadomością. Następnie pokażę Ci popularną bibliotekę Gin do tworzenia serwerów. Dzięki temu zobaczysz różnice i ocenisz czy warto zostać przy wbudowanej bibliotece czy może używać zewnętrznych.
Jak w każdym języku serwerowym tak i w Go możemy się podłączyć pod bazę danych. Krok po kroku wyjaśnię Ci jak to zrobić prosto i przyjemnie używać baz SQL, które od dziesiątek lat cieszą się niezwykłą popularnością. Migracje, zapytania czy dbanie o połączenie to nie będzie dla Ciebie nic trudnego.
Ten Kurs powstał z myślą o osobach, które chciałyby poszerzyć swoją wiedzę o język Go. Zakłada on że posiadasz już wiedzę z minimum jednego innego języka programowania i wiesz w jaki sposób działa komunikacja po protokole HTTP. Możesz też znać Go i chcieć zobaczyć jak dzielić programy na paczki tak aby były łatwo rozwijalne w przyszłości.
Geolog jak większość innych języków posiada standardowe instrukcje i w tej
sekcji przedstawić się w jaki sposób ich używać w bardzo szybki i przystępny sposób
dlatego że prawdopodobnie wiesz już czym jest zmienna pętla.
Funkcja słownik czy mapa pokaże jak to jak tego używać slangu jakie
są różnice lub rzeczy które mogą cię zaskoczyć.
Więc tworzymy sobie plik making.
Tylko musimy go stworzyć w naszym katalogu czyli w katalogu Go Sport kursy 1.
I tutaj stwórzmy sobie plik miękkiego.
Czy musimy zmienić nazwę.
Następnie musimy stworzyć nasz gość czyli to będzie go kropka mot.
Nadajemy mu nazwę czyj to będzie moduł
kurs 1 i wersje go używamy wersji 1 kropka 17.
I to będzie nowa forma.
Po napisaniu nam zniknął błąd czyli wszystko OK stwórzmy sobie paczkę zmian.
Każdy program w go musi się zaczynać od paczki min i od funkcji.
Więc już wiemy jak zadeklarować funkcję ang.
nazwa funkcji.
Tutaj będą parametry a tutaj w reklamach
będzie jakby całe mięso tej funkcji czyli będzie środek funkcji.
Zacznijmy od zmiennych zmienne deklarujemy
podejrzewam jak w większości innych języków czyli mamy indeks np.
czyli nazwa zmiennej następnie typ zmiennej czyli np.
impuls znaku równości dajemy wartość.
Następnie możemy zadeklarować trochę
inaczej tę samą zmienną nie podając tutaj typować czyli dajemy zero i wtedy go
określa ten sam czyli tu będzie prawdopodobnie Integer.
Tutaj Zauważ że ten typ czasami jest źle interpretowany wtedy musimy go podać.
Jest jeszcze trzeci sposób reklamowania zmiennych moim zdaniem ulubionych
które robią sobie nazwę zmienną dwukrotne równa się i zero.
I to jest trzeci sposób który możemy
wykorzystywać tylko w obrębie funkcji nie możemy tego zrobić np.
tutaj tutaj musimy użyć i indeks faktycznie podać typ i wartość.
Mamy jeszcze stałe w języku grał i z nich możemy używać w ten sposób czyli tworzymy
nasz indeks znowu podajemy typ i wartość tego indeksu.
No dobrze mamy zmienne ustalmy te które nie są potrzebne.
Zostawmy jedno to dalej powinniśmy zobaczyć jak działają
tablice te tablice działają w ten sposób deklarujemy tablicę.
Możemy tutaj użyć kluczowego nie musimy.
Podajemy je tutaj tryb też nie musimy ale musimy podać w deklaracji.
Więc aby zadeklarować tablicę używamy w nawiasach kwadratowych.
Czyli mamy takie dwa razy kwadratowe a następnie podajemy typ tej tablicy i
stwórzmy sobie tablicę o typie String i następnie w nawiasach klamry reklamowych.
Czyli to jest trochę inna definicja niż w
większości języków podajemy sobie kolejne wartości tej tablicy czyli to jest np.
pierwsza wartość czy jej pierwsza wartość.
Ta jest druga.
I dalej po przecinku mogą być trzecia i czwarta.
I to jest tablica. Możemy oczywiście zadeklarować ją w ten
sposób to jest taka najdłuższa deklaracja z możliwych tak obecna tutaj 2 kropka.
To jest najdłuższa możliwa deklaracja tablica.
No dobrze jak mamy tablicę to jak
odwoływać się do elementów tej tablicy w większości innych języków
piszemy nazwę naszej zmiennej a następnie w nawiasach kwadratowych
podajemy sobie indeks indeks liczymy od zera czyli to będzie wartość zerowa.
To będzie pierwsza wartość druga trzecia itd.
I to nam powinno zwrócić pierwsza wartość.
Sprawdźmy czy to działa z paczki FM Czyli
wypisz Print Line i wybierzmy ciekawsze indeks tej tablicy tutaj
podpowiada nam że zmienna Index została zadeklarowana ale nie jest używana.
I co to oznacza.
Oznacza to że jeśli stworzymy zmienną której nie używamy to nie pozwoli nam
uruchomić naszego programu żeby uruchomić nasz program.
Wystarczy że w zakamarkach po lewej
stronie klikamy Brandenburg i tu uruchomimy debatę
i zobaczymy że tutaj jest error Write 6 indeks jest tworzony ale nie jest używany.
Czyli musimy go wypisać więc używając
paczki FM czyli formaty In Out put wpisujemy nasz indeks też do konsoli.
I po uruchomieniu zobaczymy że muszę dać uprawnienia
że zostanie wypisany i pierwsza to w ten sposób deklarujemy zmienne w ten
sposób tablice to teraz słowniki czy mapy żeby zadeklarować mapę używamy to jest
mapa czyli tworzymy zmienną i tu Używamy słówka kluczowego map.
Następnie w kwadratowych nawiasach podajemy typ klucza pod tym kluczem będzie
dostępna wartość a następnie to będzie wartość czyli jak będzie wartość typu int.
I tutaj podajemy sobie w cudzysłowie naszą wartość czyli to będzie nasz klucz.
Przepraszam bardzo to będzie klucz a pod tym kluczem będzie dostępna wartość np.
0 a następnie mamy tutaj klucz 2 i będzie to jedynka.
I to jest mapa żeby jej użyć
bo to używa tego podobnie jak tablice tylko zamiast indeksu.
Tutaj podajemy klucz czyli to będzie np.
klucz i ze zmiennej to jest mapa.
A i tutaj bardzo ważna rzecz jeśli
deklarujemy zmienne w ten sposób to musimy pamiętać o tym dwukrotnie.
Uruchamiamy nasz program i zobaczymy że
faktycznie pod kluczem jest wartość zerowa.
Teraz jak usunąć jakąś wartość.
Chcemy usunąć ten klucz.
W jaki sposób to zrobić.
Niestety nie jest to tak intuicyjne jak w innych językach dlatego że w innych
językach podajemy po prostu tutaj klucz i wpisujemy to wartość typu niemal ul.
czy coś w tym rodzaju.
Tak niestety nie ma musimy do tego użyć funkcji did.
Następnie podać mapę a potem podać klucz który chcemy usunąć.
Jeśli chcemy usunąć klucz
to w ten sposób usuwamy i zobaczmy czy klucz wtedy zostanie wypisany.
I usunięty a tutaj jest kolejna rzecz która jest bardzo ważna dlatego że jeśli
mamy wartość Integer to nieważne że usunie ten klucz ten klucz został usunięty.
Ale jeśli dodamy na przykład minus jeden i uruchomimy nasz program to zobaczymy że
pod kluczem który jest usunięty jest dalej zero dlatego że
nie ma czegoś takiego jak wartość linowa jeśli wartość nie jest
wskaźnikiem o wskaźnikach opowiem ci w następnej lekcji.
Ale chodzi o to że jeśli mamy ten Integer to usuwając klucz dajemy domyślną wartość
temu tej wartości czyli Domyślną wartością dla innych jest zero czyli nie ma wartości
będzie to zero jeśli Stinga nie ma będzie to pusty string.
To jest bardzo ważne i bardzo mylące na
początku więc przejdźmy z powrotem do naszej mapy żeby dodać jakieś nowe.
No to wpisujemy mapa tutaj np.
nowy klucz.
I tutaj dajemy naprawdę wartość 10 w ten
sposób dodajemy nowe klucze jeśli chcemy wpisać ten klucz to po prostu
robimy to w ten sposób czyli w ten sam jak w większości innych języków.
No dobrze mamy już tablice mamy mapy to pokażmy jak robić z tego pętle.
Mamy w slangu trzy rodzaje pętle pętli.
Wszystkie nazywają się
zadeklaruje pierwszą pętlę typu work i pierwsze hasło Chcemy np.
przejść to znaczy po wszystkich tych wartościach tej tablicy
to tutaj będziemy mieli indeks który aktualnie jest atakowany.
Potem wartość tej waluty
tutaj trzeba to niestety zapamiętać dwukrotna jego rangę i tablica
to jest można powiedzieć i z innych języków czyli np.
w jej się to samo byśmy stworzyli mniej więcej w ten sposób jego
i tutaj w nawiasach dajemy możemy sobie coś takiego i to byłoby to Vario.
Prawdopodobnie jest tutaj też indeks ale
nie pamiętam tego i to byłoby wyjaśnia w mamy taki napis.
No i tu mamy indeks jedziemy to indeks nie jest używany więc
nie skomplikuje się to nam innych dyscyplin.
Czyli będzie jak indeks nas nie interesuje
interesuje nas wartość która w tym przypadku jest liderem i wybierzmy.
I to jest pewien rodzaj pętli drugiej pętli.
To jest taki klasyczny for czyli.
Tworzymy najpierw zmienną czyli np.
i która będzie zero potem pośrednik oddajemy sobie wartość i mniejsza od 10 a
następnie co się ma stać po zakończeniu tej pętli czyli dodać 1.
I tutaj chcemy ten indeks wypisać w piśmie.
I to jest drugi rodzaj trzeciej pętli.
To jest po prostu taki nasz.
Czyli dopóki jakaś zmienna jest prawdą czyli stwórzmy zmienną i zero.
I teraz fora i mniejsze od 10.
To ta pętla będzie prawdziwa.
Czyli to jest po prostu warunek i plus jeden powoduje.
Czy będzie dokładnie taki sam efekt.
I tu wpisujemy
po ramieniu naszego programu zobaczmy jak to zadziałają
i zobaczmy że pierwsza pętla wypisuje największą wartość drugą wartość.
Kolejna pętla działa nam od zera do
dziewięciu i ta trzecia pętla również działa od zera do dziewięciu.
No i mamy trzy rodzaje różnych pętli nie ma pętli Will wszystkie są formami co jest
dosyć dużym ułatwieniem to jak mamy pętle to stawiać taka funkcje żeby stworzyć
funkcję to trzeba użyć słów kluczowego Fang.
Następnie nazwa funkcji i tu będzie nazwa Nowa funkcja nowa funkcja.
Następnie dajemy na okrągłe i przekazujemy parametry do funkcji.
Najpierw dajemy nazwę parametru czyli to będzie np.
Access Token i to będzie typ parametru czyli String po spacji.
Następnie jeśli chcemy zwrócić coś z tej funkcji to po prostu zwracamy np.
String żeby zwrócić coś co to Używamy słówka kluczowego Ritter z nazwą np.
parametru i teraz zwrócimy nasz Access Token z tej funkcji.
Bardzo często go slangu używa się kropek.
Czym jest krótka z angielskiego jest to tak.
Służy ona do tego że z funkcji na przykład
nowa funkcja 2 możemy zwrócić dwie wartości lub nawet więcej.
Najczęściej używa się dwóch wartości żeby to zrobić.
Używamy tu nawiasem okrągłego i tu dajemy
String i po przecinku następną wartość czyli np.
dwa stringi.
I wtedy musimy Access Token i Access Token po przecinku jak czegoś takiego używać.
To jeśli chcemy wywołać tą nową funkcję
dwa przekażemy tu jakieś nasz Access Token.
Załóżmy jakiś String chcemy te dwie zmienne wziąć.
To będzie zmienna 1 to będzie Access Token i po przecinku Access Token 2.
I to powoduje że mamy dostęp do akt i do aktu drugiego.
Najczęściej jako Drugim parametrem
zwracamy tutaj błąd to stwórzmy ten błąd na szybko spadki.
Tworzymy nowy błąd który to będzie nowy błąd.
I tu będzie wtedy błąd i najczęściej spotkasz się z takim zapisem
i wtedy najczęściej robi się tak że jeśli błąd jest różny
to wtedy coś robimy i to jest najczęściej jakiś błąd obsługa błędów.
Dobrze wiemy już że są kratki wiemy jak
zadeklarować funkcje to zostały nam teraz
instrukcje warunkowe żeby zrobić instrukcję warunkową to tak jak tutaj
wcześniej pokazałem trzeba napisać jeśli to jest warunek i tutaj jest zwrotka.
Czyli jeśli załóżmy jeden równa się jeden to to się wywoła.
Potem jeśli jeden jest równe dwa no to to
nigdy nie będzie prawdą więc za każdym razem będzie się wywoływały S.
Ale jeszcze trzecim sposobem w przypadku iPhone'ów jak pewnie się domyślacie jest
jeden równa się dwa jeśli nie jeden równa się dwa to jeśli dwa równa się trzy a
jeśli nie dwa lub trzy no to wtedy mamy trzeci warunek.
Jeśli to nie jest prawdą to wtedy jeśli to jest prawdą to wtedy to się wywoła.
żadne z tych nie wywoła się nasz ostatni S.
No dobrze jeszcze oprócz newsów mamy swój czas.
To jest nic innego jak mamy jakąś wartość.
Mamy różne kasety jeśli jakaś wartość
spełnia jakiś warunek jakiś czas no to wtedy powiem wchodzi nam do tego czasu.
Dobrym przykładem będzie
chowanie się po systemie operacyjnym zróbmy tutaj stwórzmy zmienną oraz.
Tylko że tutaj dochodzimy do pewnego problemu jeśli mamy
nazwę paczki OS i mamy nazwę zmienną oraz to co się go zjeść.
Więc tutaj zwracam na to uwagę.
Więc bierzemy spadki rano spotkał go głos i to
ta zmienna pokazuje nam jak i na jakim operacyjnym systemie aktualnie jesteśmy.
To jest firmy naszego czasu os.
I tutaj pierwszym czasem będzie Darwin czyli Mac OS my wybierzmy.
Jestem na Maku.
Drugim krajem będzie Linux
to tu będzie klasyczny Linux Enterprise Linux a jestem na Linuksie.
I trzeci kraniec to wykaz.
I tutaj jestem na czymś innym tak naprawdę więc sobie piszemy na czym jesteśmy.
Jestem na plus i tutaj wpisujemy naszą zmienną
opowieść i to jest przykład na to jak dodawać do siebie znaki
po prostu między styczniem a drugim treningiem dodajemy plus.
To powoduje włączanie tych dwóch znaków.
Jeśli sobie to robimy to wyskoczył błąd że akces to jest ale nie jest używany.
Google bardzo pilnuje więc jeśli chcemy pominąć nie chcemy mieć tego co czeka na
to po prostu używamy tutaj Andy'ego skora ta powoduje że nie używamy tej zmiennej.
No dobrze uruchomimy to jeszcze raz.
I na samym końcu nie wywołało się już tutaj nic.
Dlaczego.
Dlatego że nowa funkcja 2 zwraca nam tutaj błąd.
Zwróćmy tutaj NIL czyli brak błędu.
I to jeszcze raz.
I jestem na Maku i ten ten kot jest uruchamiany na Maku dlatego jest ks.
Darwin.
No dobrze to jeśli już mamy swój czas mamy nasze IP mamy nasze kroki które są
bardzo przydatne i niezbędne wręcz mamy formy mamy mapy mamy też tablice i mamy na
to czas na pierwsze zadanie i tym zadaniem będzie liczenie średniej
temperatury które panują w Warszawie i w Madrycie.
Natomiast żebyś wykonał to zadanie to musisz jeszcze jedną rzecz wiedzieć.
Jeśli mamy naszą tablicę
to żeby sprawdzić długość tej tablicy używamy do tego funkcji Lens i jeśli
podamy w nawiasach okrągłych tablicę naszą to ta funkcja zwróci nam
długość tej tablicy uruchomimy to i zobaczmy czy faktycznie to działa.
No i widzimy że tablica ma długość 2
i z tym zadaniem zostawiam cię do następnej lekcji w której będzie to
rozwiązanie tego zadania a tymczasem zapraszam Cię do niej i do usłyszenia.