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.
W poprzedniej wersji poznaliśmy dane z internetu.
Je na format cenowy i zrobiliśmy to w taki sposób żeby to było
łatwo testowane i łatwe w użyciu dla innego programisty.
Tej lekcji napiszemy to do pliku czytamy Jeśli mamy to z pliku a jeśli tego
nie mamy to pobieramy z internetu i zapisz się do pliku.
W poprzedniej wersji napisaliśmy w funkcji
my i nasz serwis Stworzyliśmy go i wybraliśmy tych użytkowników z internetu.
Wróćmy do naszego pliku user
go do naszego serwisu i do piszemy tutaj dwie funkcje w UE i users.
I tu będzie sejf i user files.
I druga funkcja którą napiszemy to będzie odczytanie użytkowników z plików czyli
V i teraz ta funkcja będzie przyjmowała użytkowników których chcemy zapisać.
Czyli będzie przyjmowała indeks
a ta będzie zwracała jeśli istnieją czyli zwrócimy tutaj wskaźnik.
Jeśli to będzie wartością
typu Nil to znaczy że nie ma użytkowników to od razu niejako żeby
żebyśmy nie mieli żadnego błędu i zacznijmy na razie od zapisu
użytkowników do pliku aby zapisać plik na na komputerze.
Trzeba użyć biblioteki oraz i ona ma
funkcję Right i jak widzimy ona ma tutaj kilka parametrów.
Mamy tutaj nazwę pliku mamy tutaj strumień
bajtów czyli jakby tablicę bajtów i mamy parametr czyli.
By każdy system operacyjny może zapisywać
jakieś pliki z odpowiednimi ograniczeniami.
Ma w tym przypadku użyjemy 0 6 4 4 czyli
klasycznie możemy odczytywać możemy zapisywać.
Tak więc najpierw musimy pliku.
Potem musimy przekazać jakiś strumień bajtów więc przekażemy na razie String i
na końcu 0 6 4 4 i ta funkcja może zwrócić nam błąd.
Oczywiście
więc na razie nadajemy nazwę temu pliku i niech to będzie Józek Skorupka XP.
Musimy przekazać naszych użytkowników czyli najpierw musimy przerobić zestaw
które do strumienia bajtów żeby to zrobić musimy użyć innego sposobu na ratowanie
Jacksona do strumienia bajtów niż użyliśmy w poprzednim razem.
Owszem również używamy do tego biblioteki
Jackson natomiast używamy do tego NKWD i tej mamy teraz
w slangu są dwa rodzaje na kontraktowanie kodowanie i kodowanie Jacksona.
W tym przypadku będziemy zwracać czyli w trakcie jakiego będzie decydowało
co do tego czy jest ona będzie nam wysyłała ten strumień w trakcie.
Jest to bardzo przydatne w momencie kiedy wracamy strumień Jacksona
do internetu czyli jakby w ramach tego jak już dokonujemy to od razu to zwracamy.
Drugim sposobem jest ratowanie całości i zwrócenie nam tablicy zakontraktowany.
I to w tym przypadku nam się przyda
dlatego że chcemy to jest Marshall i Un Marshall pracuje Jacksona.
Jest jeszcze druga funkcja która nazywa
się Marshall i ona przyjmuje Jacksona więc użyjemy funkcji Marshall
i ona nam zwraca naszą datę i lub błąd więc musimy sprawdzić czy to jest.
Jeśli jest wola to chcemy połączyć naszą aplikację
a jeśli jest główny nurt no to mamy tutaj nasze dane które chcemy wrzucić do pliku
języka no i oczywiście jeśli wystąpi jakiś błąd to chcemy wyłączyć naszą aplikację i
zobaczmy że Google zwraca uwagę na wsad usuwamy tzw.
kropek dlatego że błąd został zmienna o nazwie error została stworzona tutaj
więc my ją po prostu na tę wpisujemy i wpisujemy do pliku jest tekst.
No dobrze więc teraz po wywołaniu metody GET users po pobraniu i zdecydowania
przed wyrzuceniem jej do użytkownika chcemy ją zapisać wpisujemy
w ub.r. sejf już trafił i tak i tutaj widzimy że mamy do odwrócenia błąd.
Do użytkownika więc możemy przekazać z tej
funkcji błąd i zwrócić tutaj jeśli występuje więc to piszemy tutaj że ta
funkcja może zwrócić błąd i zamiast Lock fatale możemy tutaj zwrócić błąd.
Tak więc wtedy tutaj będziemy musieli
obsłużyć ten błąd 40 lat to wtedy Saturn juz raz pusty obiekt i ten błąd.
A jeśli nie użytkowników sprawdźcie w tym momencie czy to działa.
żeby to sprawdzić
a tutaj funkcja zwraca oczywiście Nole jeśli nic nic się nie wydarzyło po drodze
uruchomimy ten kod i zobaczmy czy zostanie stworzona.
Stworzony plik i tekst jak widzisz znajduje się tutaj też plik
z modą czyli wszystko jest OK i wygląda to jak poprawny Johnson.
W takim razie wróćmy do naszego języka
obcego i zaimplementowane pobieranie tych danych z tego pliku.
Aby to zrobić jak zapewnia się domyślną szczebla spadki oraz Kropka
Read film i nazwę pliku Tutaj czyli w naszym przypadku będzie Józek z tekstem
tutaj dostaniemy data lub błąd i funkcja zwraca nam datę lub błąd.
Musimy sprawdzić czy błąd jest różnorodna jeśli jest różna od lat
chcemy po prostu czyli Wystąpił błąd podczas odczytywania tego pliku z menu że
nie udało się pobrać użytkowników z tego pliku.
I tutaj mamy zmienną typu data czyli tablicę bajtów z tablicą bajtów.
Musimy sobie poradzić w ten sposób czyli musimy przerobić to na
users żeby to zrobić musimy użyć Jackson umarł więc piszemy James Marshall
i on Marshall przyjmuje strumień bajtów i interfejs czyli musimy z
powrotem stworzyć sobie naszych użytkowników jako pustych a
następnie przekazać tę datę i wskaźnik do naszych użytkowników żeby go nie stworzył
kopii tylko żeby przekazał dokładnie tych użytkowników i tutaj wrzucił nasze dane
i oczywiście zwraca błąd czyli musimy go obsłużyć.
Czyli jeśli błąd zgłoszono wolno to nie.
A jeśli wszystko jest OK to po prostu zwróci naszych użytkowników.
Jak widzisz
wyświetlają że jest błąd dlatego że my wymagamy że z tej funkcji zwracamy
wskaźnik do użytkowników a my tutaj chcemy zwrócić faktycznie użytkowników więc
musimy przerobić to na wskaźnik dodając tutaj znaczek Enea czyli Shift z siódemką.
I w naszym Gattuso.
Najpierw możemy sprawdzić czy
możemy każdego Józef I tutaj pobrać i w
ogóle to wtedy naszych użytkowników.
I brak błędów czyli to co tutaj robimy to pobieramy użytkowników z pliku.
Jeśli użytkownicy nie są niczym to zwracamy użytkowników i zwracamy
tutaj Visual Studio automatycznie podpowiedział mi że trzeba użyć gwiazdki.
Dlaczego dlatego że tutaj chcemy zwrócić faktycznych użytkowników a nie wskazujemy
czyli nie używamy wskaźnika czyli używamy normalnych użytkowników.
Teraz ta funkcja zwraca może zwrócić.
Dlatego że zwracamy w niej wskaźnik więc
sprawdzamy czy to jest różna od mola jeśli jest różna od to na pewno ta zmienna
wskazuje na faktyczną rzeczywistą wartość więc musimy ją przerobić z powrotem na
wartość czyli wziąć ją z pamięci skopiować i zwrócić po to jest używany.
Ta gwiazdka
początkowo może się mylić gwiazdka z endem ale spokojnie i dlatego jest na tyle
dokładne że na pewno podpowie ci że robisz źle.
No dobrze skoro to napisaliśmy to
uruchomimy ten kod i zobaczmy czy faktycznie zostanie to pobrane z pamięci
czy zostanie zrobione zapytanie w tym celu żeby to sprawdzić.
Najlepiej żebyśmy ustawili sobie break point tutaj żeby
sprawdzić czy faktycznie zapytanie jest robione czy może jest to z pamięci.
Przejdźmy do pliku Mango uruchomimy nasz program i jak widzisz
po pobraniu użytkowników użytkownicy już nie są bólem więc zwracamy użytkownikom.
Natomiast jeśli usunie się plik Józefa z tekstem czyli naciska w tym momencie
Command Pack Space i uruchomiony po raz kolejny nasz program
to okaże się że nie wchodzimy już do tej dwudziestej trzeciej tylko wchodzimy
do linijki dwudziestej szóstej czyli pobieramy użytkowników z bazy danych.
Jeśli wywalczymy ten break point i
unikniemy Play to okaże się że po raz kolejny został
stworzone nam plik czyli stworzyliśmy takiego ch.
Czyli jeśli mamy tylu użytkowników że
wracamy z pliku a jeśli nie to tworzymy i pobieramy i zapisujemy do pliku.
I to by było na tyle w tej sekcji i zapraszam do kolejnego rozdziału.