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.
Jeśli jesteś doświadczonym programistą to
prawdopodobnie często spotkałem się z sytuacją w której musiałeś napisać
dokumentację do swojego API co nie było zbyt przyjemne.
W tym celu w tej lekcji pokażę ci jak zrobić automatycznie generowane API które
nawet będzie miało swoją własną stronę internetową.
Służy do tego słabo więc przejdźmy do naszej przeglądarki.
Wejdź na stronę www ale wpisz sobie Golonka słabo i to jest pierwszy link.
Powiedzmy sobie troszkę niżej dlatego że słabo to jest biblioteka która jest typowo
liniowa czyli Command Line i żeby zainstalować tę
bibliotekę dla wersji Googla 1 15 musimy użyć tej metody a dla nowszych
musimy użyć dokładnie tej metody więc użyjemy zainstaluje.
Przejdźmy do terminala w naszym
naszym projekcie wybierzmy go i użyjemy tej metody do instalacji naszego składu.
Po instalacji mamy dostępną metodę słabe.
Więc jeśli piszemy i nic to w moim przypadku niestety to nie zadziałało.
Dlaczego to nie zadziałało.
W dokumentacji niestety nie znalazłem odpowiedzi na to ale odpowiedzią jest
dlatego że nie mamy nie mam deklarowanego tak zwanego pasa.
Aby tego go ustawić należy wklej
od kodu jeśli chodzi o mój przypadek czyli to musi być pas do mojego kolana.
Jeśli to wy eksportujemy to słoik i nic już jest dostępny i
komendę też wykonujemy słoik wygenerował parę pliku jak zobaczymy
w tym miejscu widzimy eksplozję zobaczymy że tutaj została
stworzona stworzony katalog DX i w tym DX jest tutaj w zasadzie pusto.
Dlaczego tutaj jest pusto dlatego że
musimy najpierw w pliku Main zadeklarować co to jest za serwis.
Wróćmy więc do dokumentacji i zobaczmy co ta dokumentacja tutaj nam odpowiada.
Tutaj przed plikiem Machine mamy bardzo dużo informacji które możemy ustawić o tym
API więc skupimy to i wkładamy przed nasz plik my
tych rzeczy prawdopodobnie nie będziemy musieli sobie tworzyć dlatego że tutaj są
informacje na temat w jaki sposób wygenerować np.
token czy np.
SKOK które są dostępne wobec tego API
i inne nieprzydatne w naszym przypadku rzeczy.
Więc zostawmy
bez obaw bez obaw to jest coś co jest takim czyli wszystkie zapytania np.
będą dostępne pod API zresztą jak my tego nie chcemy więc dostajemy tutaj Flash.
To jest podstawowy adres URL API to jest licencja kontakt do portu.
Tytuł API wersja tak itd więc
zostawmy sobie tak naprawdę ten opis i wersję API zostawmy tutaj np.
user.
User.
No więc mamy już zadeklarował w jaki sposób będzie nazywany nasz serwis jaka
jest jego wersja jaki jest jego opis jak jest jego Host based paw.
Teraz musimy zadeklarować
i opisać czym są nasze zapytania więc zapytania będziemy opisywać nad
funkcją gdzie to zapytanie jest czyli w tym miejscu i żeby to zrobić trzeba
trochę zjechać niżej i zobaczyć w jaki sposób te zapytania są obsługiwane.
Przykładowy opis takiego zapytania więc i my go tutaj zobaczmy więc tak to jest
user i sama czyli podsumowanie czyli user jakie.
Jaki jest opis tego opis tego co to jest This Is It.
New IT to jest
typ zmiennej którą wymagamy więc tak tego nie potrzebujemy i teraz tak akceptujemy
akceptujemy Jacksona produkujemy Jacksona nie produkujemy nic
więc usuwamy ten parametr i co jest haram czyli to co będzie
wymagane jako parametry do momentu czyli np.
ukośnie IT.
My tego nie wymagamy nie potrzebujemy więc usuwamy to jest tak w przypadku sukcesu
zwracamy błąd 201 zwracamy obiekt więc zwracamy http:.
Request.
Czyli to zwracamy.
Czyli jednak produkujemy coś więcej dodamy czasem i że w przypadku.
Wracamy HD że my tego nie wracamy więc przypadku błędów wracamy wracamy.
I tu będziemy wracać.
Nic więc może nie to nie dodajmy typu Object tylko np.
string.
I możemy też zobaczyć 500 i to wtedy jest
również streaming i nie zwracamy wtedy nic.
No i możemy jeszcze zadeklarować
fajerwerki kwotowe czyli jeśli żadne z tych nie jest prawidłowe to jak będzie
wyglądał domyślny end point i jaki jest nasz.
Do tego zapytania więc jest to zapytanie typu POST
I jest to głośnik juz raz i w tym momencie jeśli
znów wykonają wywołane metody nic no to zobaczymy tutaj pewnego rodzaju błąd
pars Command info Point Tip HTTP Request w taki sposób dlatego że takiego
systemu który nie istnieje istnieje więc troszkę inna nazwa wygeneruje jeszcze raz
i zobaczymy że mamy kolejny błąd z 400 string.
I tutaj musimy zobaczyć jak zachowuje się to w przypadku Turinga czyli np.
kupiłem sobie już szukamy jakie są możliwe.
Czyli musimy podać wartość czyli pusty String
i jeszcze raz tą dokumentację i znowu zobaczymy tutaj błąd.
Ponad 400.
Po raz kolejny jest to błąd dlatego że po
TP musiałem powiedzieć że to jest jeszcze string.
To jest po prostu pewnego rodzaju format
który jest wymagane żeby słowo mógł wygenerować nam tę dokumentację.
I teraz udało nam się wygenerować te pliki.
Czym są te pliki jakich użyć i przykładem np.
jest to że generuje nam się plik AMR skoro
filmy ten plik otworzymy w nowej karcie Sławomir GUI
i pierwszy to jest słaba jakość ale i tu mamy edytor.
Wchodzimy w ten edytor.
To się chyba znajduje gdzie indziej czy będzie szwagier edytor i to jest.
Klikamy tutaj nasz
naszą zawartość pliku Jamal i coś zobaczymy że to jest nasza nazwa.
Tu jest jak w bajce paw.
Tu jest nasz opis i mamy end point post
Click user i on przyjmuje takie odpowiedzi czyli przyjmuje klienta to jest puste itd.
Ale musimy zapewnić że wymagamy jakiejś struktury.
Więc
tutaj jeśli sobie poszukamy gdzieś dalej to tutaj gdzieś znajdziemy że jest tutaj.
PAP i tutaj musimy znaleźć że to jest parametr.
I tutaj możemy nazwać te parametry i co to jest za parametr to jest.
PAP Czy to jest np.
i w naszym przypadku jeśli wejdziemy do
zera to my wymagamy parametru Body od body czyli to będzie nazwa body body
KRRiT Józek to będzie nasz HTTP kropka user request.
W ten sposób jest to wymagane i to jest user information.
Teraz w tym momencie przygotowujemy
naszego klienta i zobaczymy na naszym torze to jeśli zobaczymy.
To jest wymagane
jest to Body Józek Information i wymagamy e-maila i Passport.
No dobrze dajmy sobie w takim razie całą resztę punktów.
Czyli login i user i to będzie login user.
Stoke on przyjmuje login request.
Tak zwraca login response.
Tak i może wrócić obiekt czy nie obiekt
wraca po prostu 401 a raz lub 5 jako problem i tu będzie login to będzie post.
Mamy zapisane trzeba teraz Józek.
I gdy Info Info.
I to jest tak przyjmuje nic czyli
nie chcemy ale chcemy żeby to był program typu Hyde więc byśmy.
I tu będzie i autoryzacja zobaczymy.
Czy to wygeneruje nam to czego oczekujemy i sukces to jest 200.
To jest obiekt typu Get Response i to może być autograf lub 500.
To może być Józek kropka.
W zasadzie bez nośnika typu robimy sobie taką dokumentację nie
wyskoczył błąd w Twoim Type Definition Look Good i sposób.
A to nie istnieje taka struktura więc musi być geniusz i to musi być zmienione.
Dobrze wyglądają imię naszego klienta po raz kolejny kopiuje nasz.
Do edytora i zobaczmy czy wszystko jest OK.
Gad user guzek to mamy zły błąd.
Z własnego która jest przyjmowana
dobrze to jest zwracane ale nie ma tu informacji że przyjmuje hetero.
Więc żeby dostać autoryzację na główkę trzeba dodać coś takiego.
Czyli mamy tutaj odpowiedź 200 i wymagamy
parametru o nazwie Auto Edition typu HDR typu string.
Czyli to jest wymagane czyli dla terrorystów.
To jest.
Access Token to wygeneruje i zobaczymy.
To mamy dokumentację podejrzewam
wymaganiom HDR stringi tutaj mamy dokładnie to
i dzięki temu możemy sprawdzić i wywołać taką metodę podając nasz token.
To zapytanie zostanie wywołane.
To dobrze więc to jest nasz plik który możemy użyć jako nasza dokumentacja.
Ale co jeśli chcemy udostępnić po prostu
link żeby do tej dokumentacji żeby po prostu ją zobaczył.
To też jest możliwe.
Wystarczy że dodamy do naszego Gina obsługę takiego czegoś
i aby to zrobić należy po raz kolejny wrócić do dokumentacji naszego słabego
znaleźć takie miejsce tutaj to jest zapytanie typu gadżet tutaj
nośnikiem i to będzie gwiazdka czyli wszystkie zapytania
będą kierowane do dzieci Sławek Rob Chandler Sławek Chandler.
Czyli po prostu kopiuje zmienną i my ją tutaj zrobimy i nie istnieje.
Czym się kierujemy.
Trochę wyżej to zobaczymy że tutaj mamy taki import z kopii to i klamry.
Jeśli to w klimacie.
Do importerów i zainstaluje Metro Paczki czyli jedziemy Quick Fix i stal.
Ja mam już zainstalowane.
Jedyną rzeczą którą musimy zrobić która jest bardzo ważna to za importowane z
naszego katalogu DX czyli to będzie nasz kurs 1 w tym przypadku DX.
I żeby Google tego nie usunął po zapisie
w ten sposób to musimy dodać taki Anders skoro nie będzie kursu 1 Xbox.
Tak.
I w tym momencie jeśli uruchomimy ten
program to wyrzuciło nam błąd potem kobiet Missing go sum Entry.
To się czasami zdarza dlatego że go wymaga
żebyśmy dodali a konkretnej wersji więc wywołają mu tę funkcję w konsoli.
I zobaczmy czy to pomoże Włochom po raz kolejny.
I z tego się uruchomił i teraz tutaj
pojawiły się słabe geny i to idzie do naszej biblioteki Custom.
Wracamy więc uruchomimy to w przeglądarce.
Czyli lokal host.
80 80 słabe
i mamy słabe Not Found i żeby to naprawić to trzeba na końcu tego adresu dodać po
prostu indeks HTML i mamy tutaj dokładnie taką samą
dokumentację do naszego zapytania i oczywiście po
naciśnięciu przycisku out możemy po prostu wywołać w tym miejscu
dodać autoryzację i po wybraniu Executive dostajemy tutaj błąd.
A to 401 pkt z grami i spoty a więc w ten sposób można
zaimplementowane automatycznie generowane dokumentacje używając biblioteki.
A tymczasem zapraszamy do udziału w którym pokażę ci jak zaimplementowane czy jak.