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.
Skoro znamy już podstawy języka napiszemy
coś praktycznego w tej lekcji napiszemy swój pierwszy
praktyczny projekt w którym bierzemy listę użytkowników i przekazujemy ją na własną
strukturę która będzie miała kilka różnych pól.
Zacznijmy od tego że żeby pobrać coś skądś potrzebujemy mieć jakiś interfejs a
użyjemy tutaj ogólnodostępnej interfejsu który udostępnia Hub.
W tym celu żeby znaleźć odpowiedź musimy wejść na stronę góry i wpisać Open API.
Józef.
I tutaj mamy.
Wchodzimy pod ten link.
A następnie szukamy naszego End pointa
dzięki któremu wybierzemy listę użytkowników.
I tutaj mamy listę Józef i CNN Point
pobiera listę wszystkich użytkowników którzy są zalogowaniu na Kubie.
I tutaj mamy przykładowy
przykładowe zapytanie czyli musimy zrobić zapytanie typu pod nr zróbmy to zapytanie
otwórz my nowej karty i wklej link który tutaj mamy.
Jak go otworzymy to zobaczymy że mamy tablicę i tablicę obiektów.
Oczywiście jest to część mamy tutaj pola typu login ID i tak itd.
Więc powiedzmy sobie na początku
tego że jest ona i wypisze go to konsoli więc wracamy do naszego kodu slangu
i w paczce tworzymy zapytanie żeby stworzyć pytania i
pobrać użytkownika z zapytaniem czy pogrzeb musimy z paczki HTTP wywołać.
I jako parametr musimy podać URL z którego
chcemy pobrać te dane więc mamy tutaj nasze API users.
I ta funkcja zwraca nam dwie rzeczy zwraca nam Response i zwraca nam błąd.
I klasycznie w Elblągu błąd sprawdza się w ten sposób.
Jeśli błąd jest różna od dwóch to chcemy w tym przypadku zwrócić
błąd typu fatale czyli chcemy zabić aplikację w tym przypadku oczywiście
chcemy wypisać nasz błąd jako drugi parametr response.
Więc jeśli tak w slangu API i funkcje które wzbogacają błąd.
Jest taka zasada że jeśli błąd jest różny to wtedy jest błąd.
Jeśli sprawdzimy że na pewno jest bólem
to wtedy możemy używać naszego drugiego czyli naszego sponsora
bez jakichkolwiek problemów więc możemy spróbować wypisać bo z naszej odpowiedzi
czyli w zasadzie Johnson jak piszemy boty to zobaczymy że boty znają Krauzego.
To jest pewien rodzaj bufora który przechodzi bez zapytania i
musimy go odczytać do strumienia bajtów strumień bajtów.
To jest w zasadzie z jedynki i ten strumień bajtów musimy przerobić
dopiero na trening żeby wypisać naszego Jacksona.
żeby to zrobić najpierw musimy odczytać
cały nasz bufor który przychodzi z tego zapytania.
żeby to zrobić musimy użyć biblioteki iOS czyli IN OUT.
J.L. Czy JJ czyli takie użytkowe
czy wpisujemy na YouTube i tutaj mamy hit o
i Rudol przyjmuje Rider czyli tutaj możemy wpisać nasz sposób kropka body.
I znowu Witold zwraca nam dwie rzeczy odwraca kota i zwraca nam błąd
więc po raz kolejny sprawdzamy czy błąd jest różny od lat jest różny.
Chcemy zwrócić fatalny towar
czyli chcemy zabić aplikację a jeśli nie to to mamy już
tablice bajtów czyli każdy bajt 8 bitów itd czyli to jest po prostu i to 8
i chcemy wypisać je przy pomocy funkcji Print line wpisujemy
naszą datę ale kontaktujemy to najpierw na stronie i po uruchomieniu.
Powinniśmy zobaczyć naszego Jacksona który jest pobrany.
Jeśli wrócimy do przeglądarki to pierwszy login to jest bomba.
I w tym przypadku wygląda to dokładnie tak samo.
Teraz to jest.
My chcemy przerobić to coś czego będziemy
mogli używać czyli na tablicę użytkowników.
żeby to zrobić musimy stworzyć nową
strukturę czyli stwórzmy strukturę i to będzie nasz pojedynczy Józefa.
Teraz chcemy pobrać login więc pobrać
login wpisujemy swój login będzie to nasz string.
Drugie pole to jest ID i to jest jakaś
liczba więc piszemy sobie ID i to jest nasz interes.
Trzecim polem będzie pieniądz.
Nie chcemy przepisywać tego w ten sposób
dlatego że chcemy zachować kamer kasa w górę.
Chcemy żeby to było coś w tym stylu
więc piszemy bo chcemy mieć taką nazwę więc piszemy taką nazwę
i idziemy dalej chcemy mieć jeszcze w latach PRL to trochę się.
Robimy to samo.
I to też jest.
I jest taka ważna zasada jeśli chcemy pracować Tysona to wszystkie pola muszą
być z dużej litery dlatego że zewnętrzna biblioteka która to będzie robiła czyli
biblioteka standardowa wiedziała i widziała te pola dlatego że
tutaj przychodzi kolej na zasadach o których już wspominałem.
To co jest z małej litery nie jest widoczne poza naszą paczką a że
używamy zewnętrznej paczki do tego żeby przerobił nam strumień bitów na naszego
Jacksona to niestety nie będzie widziała tych pól.
Nie zostanie więc jak sobie z tym poradzić.
W Google jest też tzw. są tzw.
tagi do struktur żeby napisać taki tak
co użyć tutaj dwa razy ostro i w środku trzeba napisać Jackson
i tutaj podać nazwę która będzie odpowiadała strukturze Jacksonowi.
To samo możemy zrobić dla pozostałych pól.
I tutaj będzie to ID z małej litery tu będzie to not ID i tu będzie Avatar.
Przepraszam URL
i tak oczywiście jest to bardzo fajne bo można przepisywać takie Harrisona.
Ale nie oszukujmy się jesteśmy leniwi więc chcielibyśmy żeby to zostało zrobione
automatycznie albo automatycznie więc przechodzimy do przeglądarki.
W zasadzie możemy skopiować
Johnsona polecam uruchomić nową kartę wpisać tutaj App Week Tip kropka.
Ognia. Chyba jednak musimy użyć pomoc dla.
Wchodzimy na klika iOS i wklej naszego Jamesa.
Nazywamy go Józek i po prawej stronie.
Wybieramy go.
I w zasadzie pozostaje nam tylko skopiować
to co zostało wygenerowane i wprowadzić tutaj
i tutaj mamy wszystkie pola które są odpowiednio nazwane i nazwane zgodnie z
tym w jaki sposób go będzie pasowało tak od Jensona i tworząc nowy typ.
I tutaj jest to zrobione jako taki typ to będzie.
My tego nie chcemy więcej usuwamy.
Ale chcemy żeby to była nasza tablica
więc możemy sobie stworzyć nowy typ który będzie to Type I users.
I będzie to tablica element tak będziemy używać Józek to będzie ta
tablica jest elementem i teraz z funkcji musimy zamiast przerabiać to na datę i na
błąd więc za komentujemy ten kod chcemy współpracować bezpośrednio tutaj
strona żeby sprostować strumień przychodzący z internetu do telefonu.
Oczywiście musimy użyć biblioteki Jamesa.
Jak sobie napiszemy Jackson kropka to tutaj mamy dekoder i mamy nie dekoder.
Musimy stworzyć nowy dekoder
i on jako parametr Rider i musimy tutaj wpisać
Kabaty i ten dekoder zwraca nam on nam zwraca dekoder
czyli tworzymy dekoder i ten dekoder ma tutaj jesteś taki jak Palikot.
I on przyjmuje parametry jako interface czyli przyjmuje wszystko i wzbogaca błąd.
Więc zróbmy sobie błąd i sprawdźmy
czy ten błąd jest na pewno jeszcze nie no to oczywiście fatalnie.
I tutaj musimy podać strukturę która zostanie wypełniona czyli tworzymy sobie
zmienną Józek Józek tak i tutaj podajemy wskaźnik Kozioł
dlatego że nie chcemy skopiować to jest tylko kopia została wypełniona przez tego
Jacksona tylko chcemy żeby konkretnie ta struktura została przez niego wypełniona.
I tutaj możemy na przykład wypisać całą
treść tego Józek Tylko zobaczmy czy to ma szansę zadziałać.
I zobaczyliśmy że został wpisany dokładnie to samo z tą różnicą że jeśli mamy się
teraz do pierwszego elementu i będzie to nasz login po raz kolejny uruchomimy
to zostanie wypisany tylko i wyłącznie login.
I dzięki temu opracowaliśmy naszego iPhona poznaliśmy dane z internetu i je
wyświetlić my natomiast poznaliśmy dane z internetu
weźmiemy to teraz zróbmy to w taki sposób żeby było w przyszłości łatwe do zmiany
łatwe do testowania i odczuwalne w tym celu.
Stwórzmy nową paczkę a żeby to zrobić stwórzmy katalog tak jak w tym katalogu.
Stwórzmy katalog users.
Czy w paczce pakiet stworzymy
paczkę już teraz i w tej paczce stworzymy sobie plik user.
Kropka.
Dodajmy nazwę naszemu w naszym pliku.
Stwórzmy sobie paczkę Józek
dajmy temu plik powinna zawsze piszemy go to paczki i stwórzmy strukturę users.
Oczywiście muszę powiedzieć że jest to
struktura i do tej struktury doszliśmy metodę.
Józef I tutaj załóżmy że to będzie Józef.
I ona będzie zwracała użytkowników tego skąd tych użytkowników wziąć stwórzmy
nowy nowy projekt o nazwie Model i to będą wszystkie nasze modele dotyczące
paczki users lepsze kupujmy teraz paczki lub całą naszą strukturę do pliku Models.
I wróćmy jeszcze raz na chwilę do pliku czy kupimy całe to pobieranie
tych użytkowników do funkcji Get Józek i wróćmy z tej funkcji.
Dwie rzeczy użytkowników czyli seks lub błąd.
Nasza struktura nazwijmy z małej litery dlatego że nie chcemy aby była ona
publiczna zakaz wytłumaczę dlaczego i tutaj musimy mieć oczywiście paczkę HTTP
czyli zanim przygotujemy paczkę nad HTTP i gotujemy sobie Lock a loga nie będziemy
potrzebować bo już nie będziemy zwracać bo raczej nie będziemy zamykać naszego
programu tylko będziemy zwracać pusty wózek razem z błędem.
I tak samo w przypadku innych tego typu
problemów tutaj musimy jeszcze paczkę czasem importować.
Czyli tutaj musimy dopisać jest on
i na końcu chcemy zwrócić naszych użytkowników i brak błędów czyli.
Usłyszymy ten komentarz i zobaczmy co się stało.
Pobieramy z tego konta użytkowników po czym tworzymy dekoder
decydujemy użytkowników do tej struktury sprawdzamy czy jest błąd jeśli jest błąd
zwracamy ten błąd a jeśli nie zwracamy użytkownikowi brak błędu.
No dobrze jak tego użyć skoro ta struktura
jest z małej litery czyli nie jest dostępna poza paczką Józek stwórzmy sobie
funkcję która będzie nam która będzie się nazywała
zaraz będzie zwracała oczywiście users I zwróćmy tutaj juz
teraz zamiast z małej litery zwracać powinniśmy tutaj użyć interfejsu czyli
stwórzmy teraz Interface interfejs to będzie np.
Józef.
Serwis.
To będzie nasz interface ten interfejs będzie miał jedną metodę GET
user która będzie zwracała oczywiście użytkowników lub błąd.
I z funkcji Józek albo raczej serwis zwróćmy nasz juz raz serwis.
Jak zobaczymy to struktura już zresztą się zapaliła na czerwono.
Dlaczego. Dlatego że nie ma metody get you get
a właściwie czyli użyliśmy tutaj naszego polityka zamiast kopii tej struktury.
Jeśli dodamy tutaj
and czyli przekażemy wskaźnik echa to i tak wszystko już jest OK.
No dobrze to jak teraz będzie się tego używało.
Wracamy do paczki making go usuwamy
wszystkie informacje które w tym momencie są zbędne tworzymy nasz Józek jest.
Serwis ale musimy importować paczkę Józek żeby to zrobić piszemy import kurs 1.
Koszt oczywiście kurs 1 to jest nazwa
twojego modułu która ma znaleźć w paczce Goal.com moduł kurs 1 dlatego ja tutaj
wpisuje kurs 1 natomiast łukasik P ukośnie i juz
żeby stworzyć naszych użytkowników trzeba wpisać nazwę paczki od serwisu
i mamy serwis i na tym chcemy wykonać metodę GET Jules.
Mamy tutaj użytkowników i błąd sprawdzamy czy błąd jest już
a jeśli nie to portal a jeśli mamy użytkowników to chcemy wypisać.
Tych użytkowników w tym miejscu chcemy wypisać pierwszy np.
login i co nam to daje daje nam to że mamy w jednym miejscu pobieranie użytkowników.
Dodatkowo jeśli chcemy możemy w bardzo
prosty sposób dopisać do tego testy bądź zablokować czyli odmienić nasz los
w taki sposób żeby tak naprawdę nie pytał tego API tylko np.
pobierał te dane z bazy danych.
Tak więc w tej reakcji to by było na tyle.
W następnej pokażę ci jak zapisywać odczytywać to z pliku.