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.
Jak wiemy geolog jest językiem funkcyjny.
Natomiast istnieje coś takiego jak
struktury które są czymś takim można powiedzieć klasami w
innych językach ale jest to o wiele uboższe struktury mogą
posiadać swoje własne zmienne i możemy do struktury dopisać również funkcję
aby zadeklarować strukturę w Google należy napisać użyć słówka kluczowego talib
dlatego że w Google wszystko jest typem a następnie nazwać naszą strukturę w jakiś
sposób w naszym przypadku nazwijmy go go a następnie używamy
słowa kluczowego czyli tworzymy typ o nazwie który jest strukturą czyli strach.
Następnie jako to już że chcemy w tej
strukturze mieć jakąś zmienną czyli chcemy mieć np.
długość pola długość boku a i długość
bloku B czyli nasze a będzie oczywiście Intel i be będzie Intel.
I to jest nasza struktura podstawowa.
Natomiast naszą strukturę możemy stworzyć aby stworzyć naszą strukturę trzeba ją
przypisać do jakiejś zmiennej więc stworzymy sobie zmienną a następnie
piszemy z dużej litery jak Tango i w nawiasach podajemy po kolei nasze pola.
Czyli jeśli tak piszemy o 10 20 to pod polem a będzie 10 a pod polem B będzie 20.
żeby się odwołać do szczególnego pola wpisujemy oczywiście nazwę naszej zmiennej
i pokrótce odwołujemy się do poszczególnych palaczy i do PO czyli np.
do pola a albo do pola B i tak ważną
rzeczą jest to że w strukturach nie mamy czegoś takiego jak stałe.
Czyli jeśli tutaj podamy jakieś pole ono zawsze jest zmienne
i kolejną rzeczą jest to że w slangu żeby określić czy dana struktura
bądź bądź pole jest widoczne poza paczką określamy to za pomocą dużej lub małej
litery przed nazwą danego typu danego pola czyli w tym przypadku jeśli to
jest z dużej litery to będzie widoczne poza paczką Nan dlatego
że jesteśmy w Polsce mamy a jeśli będzie z małej litery czyli będzie
w ten sposób oczywiście musimy zmienić tę deklarację na
które z małej litery to nie będzie widoczne poza paczką.
Tak samo jest z polami a i b jeśli chcemy
żeby było widoczne poza paczką nazywamy to z dużej litery a jeśli nie to z małej
litery stwórzmy sobie teraz naszą własną pierwszą paczkę żeby to zrobić musimy
stworzyć nowy folder w naszym kursie i nazwać go np.
pakiet P kg.
W tym folderze możemy stworzyć sobie plik np.
nazwijmy go tam grupy obcego.
Jeśli wejdziemy do tego pliku musimy najpierw nazwać
nadać nazwę tej paczce żeby ją nadać musimy wpisać pakiet.
I tutaj Visual Studio podpowiada czy to ma być pakiet pakiet test czy pakiet.
My chcemy żeby to było pakiet i przechodzimy z pliku miękkiego naszą
strukturę do paczki do paczki o nazwie pakiet.
Jeśli ona będzie z małej litery to nawet jeśli ją za importuje aby
importować paczkę musimy użyć słówka kluczowego import a następnie nazwę
naszego modułu nazwę modułu możemy znaleźć w go od moczu kursy 1.
Więc wpisujemy sobie tutaj kurs 1 ukośnie.
Kg w tym momencie importuje paczkę plecak do naszej paczki magnes
ale jako że korekta nasza struktura jest z małej
litery to nie będzie ona dostępna poza paczką.
K.G. Czyli musimy zmienić ją na dużo na to żeby była z dużej litery.
Więc stwórzmy ją jest w tym momencie z dużej litery.
Jeśli wrócimy do naszego kodu to zobaczymy że go nam podpowiada że
kurs jest za importowany ale nie jest używany dlatego że jeśli chcemy odwołać
się do paczki to zanim wywołanych musimy wpisać plecak kropka czyli.
Odwołujemy się do paczki
i pokrótce podajemy nasz typ i tak jest ważna rzecz jest taka że Google
podpowiada że 20 jest podkreślone na czerwono czy jest
jakiś tu błąd jedziemy zobaczymy że im bliżej trafimy aneks podpisze im pakiet.
Jeśli wrócimy do tego to zobaczymy że ta
jest z dużej litery a b jest z małej litery.
Jeśli zmienimy ton na to żeby było za duże i za piszemy
wrócimy do menu lub kakao zobaczymy że już nie jest to podświetlane.
Nie jest to podświetlane dlatego że jest eksportowane czyli z dużej litery.
W tym momencie tylko podpowiada że nie używamy zmiennej którą stworzyliśmy.
Tak więc możemy oczywiście odwoływać się do tych pól.
Następną rzeczą jest to że do naszych
struktur możemy dopisywać zmienne funkcje żeby dopisać funkcję musimy oczywiście
zadeklarować funkcję a następnie w nawiasach okrągłych musimy
podać do której strukturę ta funkcja należy.
żeby to zrobić musimy najpierw nadać nazwę parametru tej funkcji czyli np.
tak jak nagle podać typ.
Czyli w tym momencie chcemy przypisać tę funkcję do naszej struktury
i w tym momencie to zrobiliśmy a następnie nadać nazwę naszej funkcji czyli np.
chcemy dodać na przykład dwa boki do
siebie żeby dodać boki do siebie tworzymy funkcję nazwie AP.
I to już standardowa funkcja która np.
zwróci nam Integer.
W tym momencie żeby dodać hitu musimy użyć tej zmiennej żeby to zrobić.
Po prostu wpisujemy nazwę ich po kropce mamy dostęp do tych pól
czyli dodajemy a wracamy i zwracamy to z tej funkcji i w tym momencie jeśli chcemy
użyć tej funkcji w tym miejscu nie możemy tego zrobić.
Dlaczego.
Dlatego że funkcja nazywa się z małej
litery i to na początku jest bardzo mylące musimy ją nazwać z dużej litery.
Jeśli mówimy z dużej litery po kropce ona
się pojawia jako funkcja której możemy korzystać w piśmie.
Zobaczmy czy to faktycznie działa.
Uruchom nasz program i po uruchomieniu zobaczymy że suma 10 i 20 to 30.
Teraz dajemy sobie nową funkcję pokaże ci po co są używane wskaźniki.
Stwórzmy sobie funkcję która będzie nam mnoży łapę czyli tango.
Tworzymy Multi
multiplayer i przez pisali pochwalił przez jakiś tam kit i chcemy teraz
pomnożyć P przez coś żeby to zrobić odwołujemy się oczywiście do tego
odwołujemy się do pola B w naszej strukturze czyli do tego i możemy z Walią.
I żeby to zrobić
i chcemy żeby przepisać do tego pola wynik tego mnożenia żeby to zrobić
to oczywiście musimy się do tego odwołać i przepisać z powrotem a krótszą formą tego
będzie dodanie znaku mnożenia i wtedy usunięcie tego.
Jeśli to uruchomimy czyli
załóżmy odwołujemy się do tego multiplayera IP i znowu zostałem złapany
na tym że jest to z małej litery musimy to zmienić na dłużej.
Multiplayer.
I tu chcemy np.
podzielić pomnożyć razy 15.
Tak i następnie chcemy wypisać Projekt Tango i cieszmy się tutaj na break
point żeby zobaczyć co w tej strukturze się znajduje.
Po uruchomieniu mamy naszą strukturę jak i okazuje się że dalej jest 20.
Dlaczego tak się dzieje.
Dzieje się tak dlatego że tak jak
wspomniałem przy wskaźnikach golach tutaj przekazuje kopię tej struktury.
Jeśli chcemy żeby wynik tego mnożenia B
był przypisany do tej jednej struktury którą stworzymy do tej samej
musimy tutaj użyć gwiazdki gwiazdka oznacza że przekaże nam wskaźnik dla tej
struktury ale nie samą a nie kopię tej struktury.
Jeśli w tym momencie uruchomimy nasz program aby uruchomić
program należy nacisnąć klawisz F5 i to jest skróty klawiszowe.
To teraz w tym momencie pomnożyć 20 razy 15 20 razy 15 to wynik to jest 300.
I w tym momencie na Pomorzu i przypisał do tej samej
struktury tutaj stworzyliśmy dlatego że multiplayer przyjmuje wskaźnik a nie kopia
także po to są wskaźniki najczęściej używane w slangu w strukturach no i
oczywiście wzrost tego że mogą one być zwrócone jako wartość typu.
I to by było na tyle w tej akcji a ja cię zapraszam do następnej.