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 tej lekcji uruchomimy własny pierwszy
wpis na osobnym porcie niż ten które działa na nasz http.
Aby to zrobić musimy czy nie musimy ale żeby to było czytelnie
stworzymy sobie nową funkcję która będzie się nazywała tak jak PiS i serwer.
I ja tutaj Przygotowałem taki Sniper
Sniper kodu który uruchamia ten rynek na 80 81.
Już tłumaczę jak to działa spadki nawet
tego musimy naprawić czyli importować będziemy na wsłuchiwać na porcie 80 81
jeśli nie uda nam się tego no to zgłaszamy błąd a następnie tworzymy
nasz serwer z paczki gdzie jak nie tutaj dodajemy oczywiście import
a następnie serwujemy to za pomocą kolekcjonera czyli to będzie.
To jest taki odpowiednik naszego Run w tym przypadku.
Jeśli się tego nie uda to zgłaszamy błąd
i to jest najmniejsza możliwa liczba linijek kodu która jest potrzebna
żeby uruchomić taki serwer ale to jest tak jak nic nie będzie robił dlatego że musimy
stworzyć nasz naszą obsługę serwer raczej obsługę naszego serwisu do użytkowników.
Stwórzmy taki user serwer i to będzie spadki.
I to powinno być The Old Trafford Józek.
Niestety porażka
to jest ta paczka a my chcemy mieć paczkę z tego czyli musimy zrobić coś
takiego jak serwer i tutaj z naszego nazwa naszego modułu potem jest
a potem jest adapter a potem jest zbiór pizzy i pod tą nazwą będzie nasz
liść portowy i to powinno być jak Józek serwis.
Z tego co widzę ale niestety importer
Just A dlatego że tutaj nasz serwer również jest konflikt.
Zmienimy to na serwer a tutaj piszemy do serwis i ta funkcja wymaga od nas żebyśmy
przekazali mu ten wózek do środka więc przekażemy to tutaj w środku.
Niech to będzie user serwis i przekażemy ten serwis do tego.
Do tego języka serwera
aby zarejestrować nasz serwis musimy użyć takiej metody
ale ta metoda jest nie poprawna dlatego że musimy z naszej paczki wygenerowane czyli
musimy użyć jej z naszej paczki jak i my tutaj mamy taką metodę jak
Register Józek serwis i my tutaj musimy podać dwie rzeczy
nasz serwis i nasz Józek serwis czyli nasz protokół
i tutaj przekazujemy tak naprawdę nasz serwer a tutaj nasz Józek serwer.
Józek sekretarz i co tam nam podpowiada że serwis klient nie jest
serwerem ok czyli popełniliśmy błąd dlatego że tutaj nie powinien być serwis
klient user serwis serwer dlatego że podczas generowania klienta
i podczas generowania ze schematu Lotosu klienta i serwera
zawsze są generowane oba klient chyba że oba warianty chyba że podczas
używania tej metody określamy czy chcemy mieć serwer czy klient jeśli nie określamy
tego jest zawsze generowany oba i w tym momencie ja tutaj wpisała muzyka
serwis klient i klient służy do tego żeby pytać o dane
a my chcemy serwować je do klienta więc jesteśmy z serwerem a nie klientem
więc tak naprawdę musimy teraz zaprezentować zupełnie nowy nowy protokół
czyli musimy tak naprawdę skopiować te trzy metody które są.
I wejdź tutaj i skopiować te funkcje które tutaj mamy czyli.
Tę deklarację przypisać to do naszego serwera i zwrócić w tych funkcjach
nude czyli czyli nic dlatego że na razie chcemy uruchomić nasz rynek a dopiero
później testujemy czy czy on faktycznie działa.
Możemy też dodać trzy break pointy tak żebyśmy wiedzieli czy
przychodzą te zapytania czy one nie nie uciekają gdzieś.
Dobrze wróćmy i tutaj Józek Stachowiak już
zniknął nam i nie jest zgłoszony żaden błąd.
Dobrze uruchomimy w takim razie nasz
serwis więc uruchomimy HTTP na osobnym wątku czyli uruchomimy.
I tutaj musimy przekazać efekt przekażemy
to więc i po przekazaniu możemy jeszcze tutaj dodać komentarz że startujemy z.
On port 80 81 no dobrze go home to
i zobaczmy czy to działa i po uruchomieniu zobaczymy że wyskakuje nam błąd.
W tym miejscu czyli tutaj niestety musimy tutaj się dzieje.
Metod ma NBP a nie implementacji usług serwisowych czyli nie zaprezentowaliśmy
tej metody i zobaczmy że musimy mieć taką funkcję.
Dodajmy żeby montować ten protokół.
I zobaczymy czy ona się w ogóle kiedykolwiek wywoła.
I zobaczmy jak dobrze wygląda.
Czy powinno być OK.
W takim razie.
I po uruchomieniu możemy tutaj zobaczyć że jest tutaj 80 81.
Dobrze skoro mamy już to to chcielibyśmy wiedzieć w jaki sposób
możemy przetestować czy w ogóle działa i w jaki sposób możemy tworzyć takie serwery.
Do tego będzie służyła nam aplikacja Blue więc aby zainstalować
w Google wpisujemy Bloomberg i otwieramy pierwszy możliwy link na mapie
a następnie wchodzimy do ISS i pobieramy wersję na swój system operacyjny.
Ja już mam
zainstalowane więcej uruchomione i interfejs po uruchomieniu będzie wyglądał
w ten sposób aby dodać nasze pliki to należy kliknąć
ten plik w tym roku a następnie wejść do naszego katalogu.
Gdzie posiadamy nasze pliki.
To w moim przypadku będzie to w katalogu.
To tutaj proszę bardzo i mamy od razu trzy metody za importowane.
Tak więc możemy zobaczyć czy w tym momencie jeśli jako adres piszemy lokal
host 80 81 nie ma play to czy nam to zadziała.
Zobaczmy że serwer
sponsor International Task czyli i Marshall odpływ
czyli nie zaimplementowane obsługi błędów ani zaimplementowane serwera do tego.
że wracamy tutaj oba break pointy żeby zobaczyć czy ten serwis w ogóle działa.
I czy działa i uruchomimy go jeszcze raz i
po uruchomieniu wejdziemy do naszego bloku jak i te metody jeszcze raz zobaczymy że
wszedł nam do metodyki Tusek i zobaczmy czy.
To się zgadza ale jak zobaczymy kontekst nie ma parametru
czyli nie możemy się odwołać do kontekstu stwórzmy kontekst i request.
To samo tutaj dodajmy kontekst i request.
I tak samo tutaj kontekst request.
Dobrze uruchomił ten plik jeszcze raz i zobaczmy czy tym razem nam to zadziała.
Weszło z powrotem do metod i tym razem już mamy.
Zobaczmy czy faktycznie coś tutaj w nim jest.
Jak sobie zobaczymy w tym przypadku jest LEM.
Tak więc spróbujmy w tym momencie zatrzymać to i zaprezentować tę metodę
i weźmy sobie taki Request i ten ma tutaj nasz email last name nami
hasło żeby zaimplementowane nasze położenie użytkownika w zasadzie możemy to
skopiować z naszego serwera HTTP więc róbmy to żeby przyspieszyć prace.
Skupimy całe nasze zapytanie
i co i tu musimy mieć obiekt Request i my już go tak naprawdę mamy
stworzonego i stworzonego tak więc możemy w zasadzie stworzyć sobie
spadki user stworzyć z naszego użytkownika i przy piśmie e-mail żebyśmy tu nam.
I questów też i las i hasło.
Czyli pasuje.
Mając już stworzony nasz model który
musimy wysłać do serwisu to jest dokładnie takie samo API tylko że tworzymy błąd
a nie tylko go wpisujemy i spadki user jeśli mamy takie błędy.
To możemy ten błąd zwrócić do użytkownika
czyli zwracamy tutaj nic lub błąd http a tam był zwrócony jakiś błąd.
ERROR.
No więc my możemy po prostu zwrócić uwagę.
To jest po prostu jeśli jest błąd to i ten błąd który tam jest.
A jeśli nie to nie zwracamy żadnego błędu
i zwracamy pustą strukturę Józek powiedział coś takiego
oczywiście wskaźnik tego i w przypadku logowania
możemy zostawić to ręką żeby zobaczyć czy to działa w przypadku logowania robimy
Podobną operację czyli wchodzimy do logowania kupujemy całość
w której mamy do naszego serwisu czy jak i login mamy już nie musimy kombinować a
nie sprawdzać czy jest to sukces czy jest błąd.
Więc tak naprawdę request to możemy wziąć e-mail.
I tu też nasze hasło.
Jeśli jest błąd no to wtedy nic.
I ten błąd i Response który musimy stworzyć czyli tworzymy login user list w
którym jest podejrzewam że jest tutaj Access Token i jest też nasz Access Token
i my go po prostu zwracamy czyli sprawdzamy nasz sposób i brak błędu.
No dobrze zostało nam kiedy user info i
żeby zrobić kiedy info musimy najpierw zrobić autoryzację żeby zrobić autoryzację
nie możemy tak jak w przypadku Greena zrobić sobie takiego modelu a raczej coś
co najpierw się wywoła a potem będzie nasze gadu info tylko musimy dopisać
metody tutaj która będzie po prostu autoryzowane
naszego użytkownika czy będzie autor pisze z małej litery dlatego że ona ma być
dostępna tylko w obrębie tego pliku tej paczki więc ona musi tutaj przyjąć
Access Token albo mieć adresata dlatego że zapytania
możemy wysyłać nie nagłówek ale możemy wysyłać metodami z tych meta data możemy
pobierać coś więc myślimy sobie po prostu kontekst czyli tekst kontekst kontekst.
I jeśli zwrócimy tutaj build czyli User ID
lub błąd czyli zrobimy dokładnie to samo to
będziemy już zwracać ten identyfikator użytkownika a nie tylko.
No dobrze więc tak jak z kontekstu pobrać meta data.
Bardzo prosty sposób aby to zrobić musimy stworzyć sobie dwie
zmienne czyli data i błąd i spadki meta data
podajemy sobie from in coming kontekst i tu przekazujemy kod jeśli
błąd oczywiście wystąpi no to musimy zwrócić 0 i ten błąd.
A jeśli będzie to nasze data to żeby wyciągnąć z tego autoryzację czyli np.
taki Access Token
to Access Token będzie w data i to będzie pod kluczem auto session i Access Token.
Jeśli nasz Access Token będzie równy pusty
ciąg znaków to wtedy zwracamy i zwracamy błąd żeby zwrócić błąd możemy
to zrobić z pomocą biblioteki oraz spotkaniu.
I naszą wiadomością będzie Agora a to jest.
A jeśli token nie jest różny od niczego czyli jest czymś no to możemy
sprawdzić czy faktycznie ten token się zgadza.
Jeśli z tej funkcji zostanie nam zwrócony
Józek ID to może zostać zwrócona oczywiście również błąd.
Błąd jest różne a to niczego no to wtedy
oczywiście zwracamy ten błąd czyli możemy je zwrócić a czyli stwórzmy nową a to jest
i to będzie nasz błąd więc w tym przypadku zwrócimy go też w tym
przypadku ale musimy go też przepisać dobrze mając już ID.
Możemy po prostu to id zwrócić i w tym przypadku nie wystąpi żaden błąd.
No dobrze mając.
Tutaj jest pakiet meta data.
I tutaj Visual Studio zaimponował nam dwie paczki Google
Data i meta data więc jeśli już nie my to integralna ta data
no to już mamy tę paczkę i zobaczymy że Konwent nie tu po to Bulletin.
Co co ta funkcja ta funkcja zwraca.
M.D. Czyli meta data Lublin czyli to jest tzw.
OK. Czy to jest OK.
Więc to nie będzie błąd tylko czy to
będzie OK więc jeśli ok jest główny Falls czyli wykrzykuje ok jeśli jest to jest
wszystko ok jeśli jest w Polsce to wtedy wejdzie to do środka.
To co zwróćmy że jest jest tego że to jest błąd redakcyjny.
W takim przypadku
i tutaj też podświetlany Access Token jest tablicą więc musimy zmienić sposób
sprawdzania tego więc jeśli długość tej tablicy Access Token off jest
różna od 1 lub pierwszy element tej tablicy jest równy.
Nic.
To wtedy był błąd a jeśli nie to po prostu bierzemy pierwszy.
Element tej tablicy czyli prawdopodobnie prawdopodobnie na pewno będzie to nasz
Access Token i wszystko powinno być już OK.
Więc wróćmy do naszej metody GET info z kupujmy ją oczywiście z naszego HTTP
serwera dlatego że będzie wyglądała ona bardzo podobnie.
Interesuje nas w zasadzie te parę linijek kodu i wklej je tutaj.
No i nasz Józek ID będzie pochodził z
tobą czyli z naszej metody autora czyli autogaz.
I tu mamy nasz kontekst czyli te teksty jeśli wystąpi błąd to wracamy.
Nic i mamy błąd który został zwrócony
więc w tym przypadku mamy to więc pobierane informacje o użytkowniku.
Tu zwracamy błąd który został zwrócony
a jeśli wszystko jest OK to możemy stworzyć.
Który powinien zawierać parę pól i zobaczymy jakie są pola.
Jest to e-mail leśny
e-mail czyli to będzie e-mail dwóch kropek Józek i e-mail.
Następnie będzie nam to będzie Józek info nam.
I czyli to będzie user info kropka wlasnej i zwracamy tutaj musi to być oczywiście
wskaźnik i wygląda na to że mamy wszystkie metody już zaimplementowane.
No dobrze to weźmy kakao i uruchomimy po raz kolejny
i wyskoczyło nam błąd w budowaniu a Hidden and White sprawstwo
kierownicze 75 wracamy i 75 mamy tutaj Adam autor this is.
A my musimy autostopem tutaj przekazać.
I teraz możemy uruchomić ponownie i po uruchomieniu.
Chwilę trwa 80 81.
Uruchamiamy nasze blue piece
i możemy sobie stworzyć użytkownika który będzie miał wszystko Hello.
Stwórzmy go sobie i zobaczmy czy to zadziała i jak widać zostało stworzone.
Break point nam się uruchomił
i zobaczmy czy w naszej bazie danych faktycznie taki użytkownik występuje.
Więc wróćmy do Database kropka dp.
Prawym przyciskiem myszy Open DataBase i tu mamy narzekać Explorer 8 użytkownika
który ma wszystko jako Hello więc możemy przetestować teraz przez Bloomberg.
Czy działa nam logowanie.
Zobaczmy login i hasło Hello.
I to mamy a po chwili kontaktu oraz dlatego że tutaj
nie podaliśmy adresu czyli Local host 80 81.
To zobaczmy faktycznie wchodzi nam do metodologii
ten skryptów i wróćmy do naszego bloga i zobaczymy że tutaj faktycznie mamy
Access Token więc jest kopiuj i przejdźmy do metody GET info.
Uruchomimy tę metodę ale zanim to zrobimy musimy odmienić nasz lokal host
a gorsza nie zobaczymy że jest on autorem jest więc musimy tutaj
zmienić metodę sita i tutaj pokazać i zamienić to na coś takiego.
Niestety został nam tutaj błąd dlatego że to jest podwójny cudzysłów tak uruchomimy
ten kod to zobaczymy że tu dostaniemy odpowiedź.
Break point nam się zapalił w takim wypadku dostaliśmy informację o tym
użytkowniku i w taki sposób właśnie prezentuje się serwer.
Jak pisali w następnej lekcji pokażę ci jak z pomocą czy jak pisać
zaimplementowane czat i prezentujemy go od początku do końca
i potem pokażę ci jak aplikacja mobilna jest w stanie korzystać z tego czatu a
tymczasem zapraszam Cię do następnej reakcji.