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.
Poprzedniej lekcji Pokazałem Ci w jaki sposób tworzyć nowego użytkownika pobierać
go usuwać aktualizować jedną rzecz albo kilka kilka danych w bazie danych.
I to jest wszystko fajnie bo jest to
teoretycznie ale w jaki sposób zrobić to tak żeby łatwo i
wygodnie wykorzystywać tę funkcję i stworzyć taką obsługę bazy danych w naszym
kodzie w taki sposób by była przyjemna łatwa w obsłudze.
żeby to zrobić musimy oczywiście wykorzystać te kawałki kodu które
napisaliśmy w poprzedniej lekcji ale musimy je wynieść do osobnej oczywiście
paczki nasza paczka to będzie paczka która będzie obsługiwała po prostu
użytkownika będziemy w niej tworzyć logować i inne rzeczy.
Więc stwórzmy sobie na początku paczkę i w tej w tym katalogu plecak stwórzmy
katalog user albo user i w tym katalogu i stwórzmy sobie nowy
plik czyli nacisnąć tutaj Command and czyli Control n.
I tutaj stwórzmy na przykład infrastrukturę.
E.coli.
Tylko mi się to stworzyło w złym katalogu przeniesiemy go do users
do Józek znajduje się musimy na początku powiedzieć że należy to do paczki Józek.
No i tutaj stwórzmy sobie nasz typ I tutaj np.
nie będzie Józek czy to będzie nasza struktura.
Albo niech może lepiej żeby to był interfejs.
Następnie stwórzmy np.
user in France to będzie nasza struktura
która będzie im prezentowała ten interfejs a następnie stwórzmy sobie funkcję która
będzie user infrastruktura będzie zwracała nam user infrastruktura.
Od razu zwróćmy sobie tutaj nasze usługi
i mamy musimy się zastanowić jakie metody chcemy żeby użytkownik tego naszego
naszej bazy danych mógł zrobić czyli na pewno chcemy żeby mógł stworzyć
użytkownika nasz użytkownik to będzie oczywiście user.
Nie mamy tego zadeklarował naukowiec
paczce Józek stwórzmy nowy plik który będzie się nazywał model z kropką.
Oczywiście najpierw musimy nadać paczkę a potem stwórzmy tego user.
Nasz wniosek jest oczywiście w naszym pliku.
Przeniesiemy go do model z powrotem i zobaczymy że nie mamy tego
gowna więc musimy go importować import ogrom.
I wróćmy do tego.
Nie zobaczymy w tym momencie już nasza struktura nie implementacja tego
interfejsu dlatego że nie ma metody Create Józek więc tak chcemy żeby
była możliwość stworzenia użytkownika pewnie tu może wystąpić jakiś błąd podczas
tworzenia więc ten błąd na pewno chcemy pobrać
użytkownika po identyfikator czyli musimy powołać.
I jeśli będzie ten użytkownik tego stworzymy.
Tutaj zauważ że dajemy gwiazdkę dlatego że może tego użytkownika nie być i wtedy
chcemy zwrócić tutaj nic czyli nic że nie ma tego użytkownika więc chcemy go po
identyfikator pobrać chcemy go by e-maila czyli po e-mailu.
I też może może on być ale go nie musi być.
I na pewno chcemy też.
Zaktualizować tego użytkownika Update i tutaj chcemy.
Co my możemy chcieć.
Musimy wrócić do deklaracji użytkownika i
się zastanowić w jaki sposób będzie będzie to działało.
Czyli jeśli użytkownik będzie tworzył konta to będzie się logować za pomocą
hasła i maila na podstawie hasła i e-maila będziemy tworzyć Access Token.
Więc stwórzmy ten Access Token tutaj i za pomocą tego Access tokena będzie miał
dostęp do swoich danych czyli do imienia nazwiska i maila hasła nie będziemy
podawać i hasła będziemy musieli oferować tak żeby to hasło nie było tzw.
tekście czyli jeśli użytkownik poda QWERTY 1 2 3 hasło żeby w bazie nie przetrzymywać
tego jako 1 2 3 dlatego że to nie jest do końca bezpieczne poprawne podejście.
Więc jeśli mamy akces token to musimy
pobrać tego użytkownika jako User Access Token albo token
to będzie Access Token i to będzie z powrotem iluzją
i możemy poszukać użytkownika po identyfikator PO i mailowo i na pewno po
Access Token i dzięki temu będziemy mieli jego identyfikator.
No dobrze musimy jeszcze go zaktualizować Access Token czyli zaktualizować
akt update Access Token czyli musimy podać identyfikator użytkownika czyli jaki.
Jakiego dokładnie użytkownika Chcemy zaktualizować czyli IT.
I to będzie Access Token.
To będzie nowy Access Token.
To będzie oczywiście string.
Tu możemy zwrócić błąd.
Oczywiście wspomaganie użytkownika również
może być błąd więc to może zwrócić błąd i tak samo w
przypadku dwóch pozostałych struktur czyli mamy pięć metod.
Prezentujemy je szybko do naszego języka.
Te wszystkie metody i zacznijmy pisać i tu będzie u nas taka.
I tak tak i tak dobrze i zacznijmy tu od tworzenia tych funkcji.
Bardzo mozolne to jest to
że nie ma błędu to jest brak błędów brak użytkownika
brak błędów brak użytkownika i tutaj dokładnie to samo.
Dlatego że nie chcemy żeby go nam zwracał błąd.
Tutaj mamy 5 metod.
Musimy przejść i zaimplementowane.
Jeszcze tutaj musimy zobaczyć wskaźnik żeby zaprezentować musimy mieć tej bazy
danych więc dobrze i to będzie wskaźnik do.
Bazy danych z biblioteki czyli musimy przekazać to jako naszą zależność.
Czyli żeby stworzyć infrastrukturę potrzebujemy mieć bazy danych i my ją
przekazujemy tutaj żeby ona była dostępna w każdym możliwym tutaj zapytania i tak
żeby stworzyć użytkownika przechodzimy do pliku Money.pl i kupujemy to co to jest.
Wracamy do naszego pliku do tworzenia i tutaj go tworzymy.
To jest user i dlaczego on nam tutaj
błąd zwraca uwagę a dlatego że dane użytkownika już
stworzonego czyli mamy przekazane dane więc po prostu tworzymy
naszą bazę nie mamy tutaj bazy dlatego że musimy odwołać się do naszego Józek
i z tego jest część bazy danych czy funkcja klient może nam zwrócić błąd nie.
Na pewno może nam zwrócić więc to może być zalew error.
Różne od błędu zwróć.
A jeśli nie bezbłędnie i to samo.
Pobierz użytkownika po identyfikator.
żeby to zrobić no to robimy mniej więcej
podobną rzecz czyli tworzymy naszego użytkownika.
Następnie mamy wynik zapytania odwołujemy się do naszej bazy danych i Point albo.
I tutaj podajemy nasz wskaźnik do
użytkownika a następnie podajemy identyfikator czyli ID i kropka.
Główny powód to błąd.
Opowiem ci o jednej ważnej rzeczy że błąd będzie zwrócony
nawet jeśli nie ma żadnego użytkownika czyli jeśli
jest to ta metoda czyli biblioteki error to zobaczymy że pobrana jest funkcja X.
Jeśli jeden błąd i drugi są takie same to ona zwróci wartość.
A jeśli nie to zwróci forsę.
Czyli tutaj jeśli nasz błąd jest równy i tych.
Tutaj powinno być not jak.
Czyli jeśli
błąd to jest po prostu nie znaleziono żadnego użytkownika to zwróć po prostu
Noll czyli po prostu nie znalazł się użytkownik a w tym przypadku oczywiście
zwrócić naszego użytkownika ale my zwracamy wskaźnik więc musimy przekonać
ratować ten wskaźnik A jeśli nie to zwróci brak użytkownika i błąd
że zapobieganie użytkownika tak e-mail żeby wygrać pierwszego e-maila akceptujemy
to samo co PO identyfikator że tylko tutaj podajemy e-mail równa się przecinek.
Tak i tu powinno zostać to samo tylko po innej.
I jeszcze jedno spotkanie to kupujemy
dokładnie to samo co wcześniej napisaliśmy.
Tylko tu dajemy Access Token.
To właśnie tutaj dochodzimy do momentu w którym musimy się zastanowić jakie będą
nazwy w naszej bazie danych żeby zadbać żeby Access Token był nazywany Access
Token to musimy wrócić do naszego modelu i za pomocą tagów czyli
tagi Ustalamy w ten sposób dwa strofy i wpisujemy kolorem dwóch kropek.
I tutaj podajemy nazwę naszego pola czyli
w tym przypadku będzie nazwany jako nam z małej litery.
Kupujemy to poniżej tak aby nasz los nam był.
W ten sposób nazwany nasze posłuży czymś w
ten sposób i w ten token ma się nazywać tak.
No dobrze wróćmy do naszej pracy teraz
wiemy już że na pewno ten program będzie się nazywał w ten sposób.
No i przejdźmy do aktualizacji Access Token żeby zaktualizować dane.
No to kupujemy sobie to co tutaj
zrobiliśmy czyli z tabeli user aktualizuje autostopem.
Wracamy do naszej implementacji bazy kupujemy to co tam znaleźliśmy
i tak tworzymy naszego użytkownika o identyfikator że ID.
No i to nam powinno wystarczyć.
Tu nasz model zwróćcie oczywiście jakieś tam Witold.
Chcemy zaktualizować Access Token.
Wartością może on być również pusty który będzie to prostytutki.
I jeszcze musimy uczyć Józek infrastruktury od KDP.
I tu mamy nasz wynik i musimy sprawdzić czy wynik jest od.
Czyli tak jeśli jest.
Jeśli to jest nie znaleziono użytkownika z
podanym identyfikatora to wtedy po prostu brak błędu.
A jeśli jest jakiś błąd nieznany to zwróć ten
nieznany błąd a jeśli wszystko jest ok nie zawiera żadnego błędu.
No dobrze to teraz skoro mamy już naszą infrastrukturę czyli coś co
pozwalało zrobić wszystko z użytkownikiem co chcemy w bardzo przystępny sposób
zróbmy używanie tego przejdźmy do pliku Google.
Najpierw musimy zadbać o to żeby emigrować
naszego użytkownika czyli musimy go importować żeby go importować to musimy
oczywiście nazwę importować go w naszym pliku machine czyli na górze.
Import piszemy nazwę naszego modułu.
Przypominam że nazwa moduły jest GOG.com MOL.
Od tego zaczynam kurs 1 łukasz jako Józek
i to powinno być w paczce Józek Józek jak widzimy go od razu już wie że
chodzi o tego użytkownika i migrują na tego użytkownika oczywiście
automatycznie i musimy stworzyć nasze informacje.
Józek to józek kiedy wymaga on naszej bazy danych to podajemy
bazę danych i mamy już nasze info z pięcioma metodami.
Stwórzmy więc naszego nowego użytkownika
czyli user i sprawdźmy czy to faktycznie działa.
Mamy tutaj spadki oczywiście już teraz
piszemy naszego użytkownika i tak dajmy mu imię.
Niech to będzie imiona mi się kończą niech to będzie Tomek.
Jeśli chodzi o las to niech to będzie
puste imię to też może zostać puste hasło też może zostać puste
i wszystko zostanie puste w takim razie i w naszym klimacie user New user.
Tu oczywiście błąd.
Jeśli błąd jest różnorodna to
fatalnie i niech to będzie w ten sposób zajmijmy się na tym viaTOLL i uruchomimy.
Zobaczymy czy to działa.
Jeśli wejdziemy do naszej bazy danych to zobaczymy że jest trzeci użytkownik który
ma wszystkie to puste pola ale jest to Tomek więc się wszystko zgadza.
Zauważ że tutaj Access Token jest w tym
przypadku wartością zerową czyli nie ma tokena Access Token będzie służył jako
taki token do autoryzacji czyli będziemy sprawdzać czy
użytkownik faktycznie ten użytkownik a nie inny przy logowanie będziemy go tworzyć.
No dobrze skoro mamy już stworzenie
użytkownika to może bierzmy tego użytkownika.
Więc zróbmy sobie get it 3.
I to będzie nasz user.
Przecinku
osłony tego nowego użytkownika bo nie potrzebujemy go i piszemy go RFN i USA.
Zanim się tutaj break point żeby zobaczyć
czy ten użytkownik to faktycznie użytkownik.
Wystąpił błąd klanów a sami
o sobie musimy stworzyć tą zmienną czyli przepisać dwukrotnie
weszliśmy tutaj zobaczymy czy ten użytkownik faktycznie jest.
Mamy Tomka w tym wszystkim więc teraz
zobaczmy czy da się pobrać użytkownika i pobierz mu użytkownika który ma pusty
e-mail dlatego że Tomek ma pusty e-mail więc trzymajmy jeszcze raz
i zobaczymy że mamy użytkownika który jest Tomek czyli użytkownik bez maila.
To weźmy w takim razie token.
Tutaj musimy podać a Chcemy zaprojektować użytkownika z 3 1 2 3.
Zobaczymy czy to jest błąd dlatego że
my spodziewamy się dwóch a to tylko błąd to usunie z naszego użytkownika.
I musimy usunąć dwukrotnie dlatego że błąd został już stworzony w tym miejscu.
Może to i zobaczymy czy.
To zostało zaktualizowane i zobaczmy co to jest 1 2 3.
No dobrze mając już infrastrukturę teraz
potrzebujemy mieć możliwość tworzenia naszych Access
Token ów użyjemy do tego zewnętrznej biblioteki jej tablety i token.
A jeśli chodzi o porównywanie haseł to użyjemy Becketta czyli dosyć popularną
bibliotekę i sposób kodowania użytkownik zachowania użytkowników
a właściwie to haseł użytkowników a potem będziemy porównywać to hasło żeby
sprawdzić czy hasło użytkownika jest faktycznie takie samo jakie podał.
żeby to zrobić stwórzmy w katalogu K.G. naszą nową paczkę nazwijmy ją Harper's
i w tej paczce Harper stworzymy sobie najpierw Passport kropka krótkiego
i stworzymy sobie drugi drugi plik to go nazwiemy kropką.
No i oczywiście dodajemy sobie takiego
pakietu to samo robimy jeśli chodzi o pasmo.
Zapisujemy oba pliki
i teraz musimy użyć biblioteki czyli pauza Google więc wpisujemy klubu
i zobaczymy że gdzieś tutaj będzie taka biblioteka użyjemy dokładnie.
Czyli jeżeli nawet go.
I żeby to zainstalować kupiłem adres URL z
przeglądarki wchodzimy w nasz terminal przed kopiowaniem.
No i mamy zainstalowane jej tablety.
Następnie musimy zainstalować krypta czyli wpisujemy w przeglądarkę Google.
I tutaj mamy naszą bibliotekę która to jest.
Jest ona standardową biblioteką około.
To dobrze to w takim razie również możemy go użyć piszemy tutaj naszego.
Skoro jest już za importowany to musimy
sobie stworzyć dwie funkcje czyli tak czyli Access Token.
Chcemy tę akcję spokojnie przechowywać
identyfikator użytkownika czyli identyfikator
i musimy stworzyć go przy pomocy jakiegoś pirata czyli przy pomocy jakiegoś linka.
Dlatego że nasz token
będzie podpisywane przez ten sekret i on nie może zostać upubliczniony
bo każdy który każda osoba która posiada ten sekret będzie mogła sprawdzić czy ten
token został faktycznie stworzony przy użyciu tego sekretu czyli to jest takie
powiedzmy hasło do tokena jak już sobie zaktualizować
Access Token to ja zapraszam Cię do następnej części i do następnej lekcji.