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.
Dowiedzieliśmy się jak pobierać dane z Internetu i jak przerabiać je na Jacksona
jak pracować w ogóle między strukturami a formatem Jackson
to teraz nauczymy się w jaki sposób serwować dane innym osobom czyli stwórzmy
pierwszy krok w krok aby to zrobić musimy użyć wbudowanej
paczki Langa czyli musimy importować paczkę http.
Niestety nie pamiętam jak ona się nazywała nie pamiętam jest to import http.
Następnie musimy sobie stworzyć http: handel Fang.
I funkcje handlowe przejmuje Apator i przejmuje Chandler.
Patent to jest nic innego co użytkownik będzie wpisywał w przeglądarce po
aplikacje naszego serwera czyli w tym przypadku chcemy obsłużyć ukośnie czyli
domyślny grupa w której użytkownik wpisuje a następnie musimy podać Chandler Chandler
to jest funkcja która ma Response i request.
Mamy dwa sposoby na to w jaki możemy to obsłużyć ja pokażę oba.
Więc załóżmy że paw.
I ta funkcja musi przyjmować charakter i
to jest HTTP i to musi być i to musi być normalna zmienna a nie wskaźnik.
I drugi to jest Request i to jest już wskaźnik do
request to jak tutaj podamy routerów to wszystko będzie OK jeśli chcemy obsłużyć
drugie zapytanie to dodajemy drugie handel Fang i np.
Józek. I tu możemy sobie wpisać funkcję która
właśnie przyjmuje te dwie rzeczy kupiłem sobie tutaj żeby było szybciej.
I tutaj sobie dajemy otworzenie zamknięte na was i te dwie
deklaracje są bliźniacze Japonia przejmuje pierwszą żeby mieć osobno funkcję do
handlowania zapytań usuń my i serwujemy te dane żeby to zrobić.
Piszemy http: self.
I tutaj podajemy Chandler i adres więc w naszym przypadku
chcemy podać adres tylko 0 0 0 0 80 80 czyli będziemy
nas usiłowali na 80 80 to będzie lokal bo adres 0 0 0 0
i po przecinku dajemy dlatego że nie chcemy dodawać żadnego nowego Chandler
i wybierzmy coś faktycznie jeśli zapytamy o ten serwer i o to zapytanie to wybierzmy
do tego napiszemy tablicę bajtów czyli wpisz sobie np.
Hello i uruchom by ten sektor.
Zobaczmy czy to zadziała.
Przejdźmy do przeglądarki uruchomimy Orkan host 80 80.
Jak widzimy przeglądarka zwraca nam Hello world.
Wróćmy z powrotem tutaj i to jest prosta deklaracja serwera.
Natomiast warto wspomnieć o tym że
recenzent zwraca błąd który przydałoby się obsłużyć ten błąd.
Najczęściej jest to zajęty port czyli uruchomiliśmy już na poczcie 88 80 80.
Albo nie mamy uprawnień do tego żeby jechać na jakimś porcie dlatego że nie
uruchomiliśmy naszego programu z odpowiednimi uprawnieniami.
Tak więc polecam tutaj jednak mimo wszystko
użyć fotela żeby zamknąć naszą aplikację jeśli nie możemy uruchomić.
No chyba że chcemy obsłużyć to w jakiś inny sposób i np.
spróbować kilka razy.
To też tak możemy zrobić.
Drugą rzeczą jest to że taki serwer jeśli będzie
udostępniony użytkownikom może być narażony na różnego rodzaju ataki.
I żeby jakkolwiek zabezpieczyć ten sektor
polecam oczywiście poszukać w google w jaki sposób zabezpieczyć serwer lęgowy.
Ale podstawowym zabezpieczeniem jest to jest stworzenie
więc tworzymy sobie zmienną serwera i to z paczki HTTP server.
Tworzymy
tak i my chcemy do tego wskaźnik nie chcemy
posługiwać się kopiami tylko chcemy się posługiwać jednym wskaźnikiem do jednego
no i najpierw musimy podać adres i to dokładnie to samo podajemy co w tamtym
miejscu czyli podajemy 70 80 i teraz mamy też takie Time Out.
Mamy też takie jak Real Time Out.
I mamy coś takiego jak.
Ale z tego co pamiętam
muszę sprawdzić to w przeglądarce więc http: serwer Times Good Time Out.
Albo zobaczmy to w dokumentacji którą udostępniono.
All Time i All Time Out jest tutaj teraz
musimy tutaj podać czas jaki geolog będzie maksymalnie czekał na
wysłanie zgodą Langa danych do użytkownika czyli czas pisania czyli wyślij tutaj.
I to jest bardzo często zależne od jakości
połączenia między serwerem a użytkownikiem.
Możemy np. M.
Sekund i wiemy o tym że będziemy wysyłać
użytkownikom bardzo małe treści możemy ustawić ten czas np.
na 3 sekundy maksymalnie czas czytania to
jest to co odbieramy od użytkownika do serwera.
Teraz jeśli wiemy że użytkownik zawsze wysyła nam małe dane to wciąż możemy
ustawić to na 3 sekundy a time out to jest coś takiego gdzie
to jest maksymalny czas jaki Google będzie maksymalnie czekał na następne połączenie.
Dlatego że między pytaniami jest
funkcjonuje taki mechanizm jaki paliw jaki paliw służy do tego żeby
ponownie nie nawiązywać połączenia tylko utrzymać stare połączenia dzięki temu
zapytania są po prostu szybsze więc tutaj możemy sobie ustawić np.
też trzy sekundy
czyli między dwoma połączeniami maksymalnie Czekamy 3 sekundy.
Teraz po co są one są po to dlatego że jeśli możemy coś odczytywać to np.
odczytane Jacksona np.
czytamy go to tajemnica 25.
I my już pójdziemy dalej.
Ale np.
atakujący może dalej wysyłać do nas jakieś dane które mamy na przykład w jakiś sposób
możemy przetworzyć nawet nie wiedząc o tym że nasz kod jest w stanie to obsłużyć.
W ten sposób możemy być jakiegokolwiek luka bezpieczeństwa.
Warto to dodawać w momencie kiedy wiemy że
z naszego serwisu będą go używały osoby których nie znamy.
Natomiast jak użyć tego serwera
bardzo prosto zamiast http wpisujemy serwer License i on też zwraca błąd.
My ten błąd musimy obsłużyć i tyle jeśli uruchomimy ten serwer to on
będzie działał dokładnie w ten sam sposób czyli będzie obsługiwał.
Jeśli otworzymy to dalej nam to działa.
Aby się upewnić że to jest nowy serwer
2 i spróbujemy go uruchomić jeszcze raz a jak uruchomimy i otworzymy dowiemy się że
tutaj jest dwójka czyli to faktycznie jest ten serwer i działa.
No dobrze więc dowiedzieliśmy się w jaki
sposób prosty serwer go za pomocą wbudowanych bibliotek.
I to by było tyle na tę lekcję i zapraszam do kolejnej.