100951119

Page 1


Przedmowa vii

Podziękowania viii

Informacje o tej książce x O autorach xiv

Część 0

PIERWSZE KROKI

Lekcja 1 Na miejsca, gotów, start 3

Część 1

PROGRAMOWANIE IMPERATYWNE

Lekcja 2 Prosty kalkulator 15

Lekcja 3 Pętle i rozgałęzienia 25

Lekcja 4 Zasięg zmiennych 36

Lekcja 5 Podsumowanie – bilet na Marsa 44

Część 2

TYPY

Lekcja 6 Liczby rzeczywiste 49

Lekcja 7 Liczby całkowite 57

Lekcja 8 Duże liczby 67

Lekcja 9 Teksty w wielu językach 74

Lekcja 10 Konwersje typów 85

Lekcja 11 Podsumowanie – szyfr Vigenère 94

Część 3

CEGIEŁKI

Lekcja 12 Funkcje 99

Lekcja 13 Metody 108

Lekcja 14 Funkcje jako wartości pierwszej klasy 115

Lekcja 15 Podsumowanie – tabele temperatur 124

Część 4

KOLEKCJE

Lekcja 16 Tablice mądrości 127

Lekcja 17 Wycinki – zaglądanie do tablic 136

Lekcja 18 Większy kawał tortu 144

Lekcja 19 Wszechstronne mapy 152

Lekcja 20 Podsumowanie – wycinek z życia 161

Część 5

STAN I ZACHOWANIE

Lekcja 21 Trochę struktury 169

Lekcja 22 Go nie ma klasy 179

Lekcja 23 Agregacja i przekierowywanie 187

Lekcja 24 Interfejsy 196

Lekcja 25 Podsumowanie – rezerwat zwierząt marsjańskich 206

Część 6

W GŁĄB SUŚLEJ NORY

Lekcja 26 Wskaźniki 211

Lekcja 27 Wiele hałasu o nil 229

Lekcja 28 Błądzić jest rzeczą ludzką 239

Lekcja 29 Podsumowanie – zasady sudoku 257

Część 7

PROGRAMOWANIE WSPÓŁBIEŻNE

Lekcja 30 Gorutyny i współbieżność 261

Lekcja 31 Współbieżność i stan 277

Lekcja 32 Podsumowanie – życie na Marsie 291

Podsumowanie Co dalej? 295

Dodatek Rozwiązania 297 Indeks 341

Informacje o tej ksi ce

Dla kogo jest przeznaczona ta ksi ka?

Go jest j zykiem, który przyda si programistom o szerokim zakresie umiej tno ci, co jest niezb dne w przypadku ka dego du ego projektu. B d c stosunkowo ma ym j zykiem, z minimaln sk adni i kilkoma koncepcyjnymi ograniczeniami, Go mo e by kolejnym wietnym j zykiem dla pocz tkuj cych.

Niestety, wiele zasobów do nauki Go zak ada praktyczn znajomo j zyka programowania w j zyku C. Ksi ka Zacznij programowanie w Go powsta a wi c, aby wype ni t luk i umo liwi twórcom skryptów, hobbystom i nowicjuszom szybkie opanowanie podstaw j zyka Go. U atwieniem b dzie mo liwo uruchomienia ka dego listingu i ka dego wiczenia z tej ksi ki na platformie Go Playground (play.golang.org), bez konieczno ci instalowania czegokolwiek!

Je li kiedykolwiek u ywa e j zyka skryptowego, takiego jak JavaScript, Lua, PHP, Perl, Python lub Ruby, to mo esz bez problemu zacz nauk Go. Je li korzysta e ju z formu w Scratchu lub w Excelu albo tworzy e strony w HTML-u, wybór Go jako pierwszego „prawdziwego” j zyka programowania b dzie dobrym krokiem (zobacz lm „A Beginner’s Mind” z udzia em Audrey Lim na youtu.be/fZh8uCInEfw). Oczywi cie, opanowanie Go na poziomie mistrzowskim b dzie wymaga cierpliwo ci i wysi ku, ale mamy nadziej e ta ksi ka b dzie pomocnym ród em informacji na pocz tku tej drogi.

Jak zorganizowana jest ta ksi ka?

Zacznij programowanie w Go stopniowo wyja nia poj cia potrzebne do efektywnego korzystania z j zyka Go i daje wiele okazji do wicze i doskonalenia umiej tno ci. Ksi ka ta jest przewodnikiem po j zyku Go dla pocz tkuj cych. Zak adamy, e czytelnicy przeczytaj j w ca o ci, bo wiadomo ci podane w kolejnych lekcjach stopniowo buduj wiedz , któr chcemy przekaza . Ksi ka ta nie ma by pe n specy kacj x

j zyka (ta dost pna jest pod adresem: golang.org/ref/spec), ani nie ma opisywa ka dego jego elementu, ale przedstawia ich wi kszo i porusza te zaawansowane tematy, takie jak projektowanie obiektowe i wspó bie no .

Nie wa ne, czy chcesz tworzy masowo wspó bie ne us ugi webowe, czy ma e skrypty i proste narz dzia, ksi ka ta pomo e ci zdoby solidne podstawy tego j zyka.

Cz 1 wprowadza zmienne, p tle i instrukcje warunkowe, umo liwiaj c tworzenie prostych programów, od powita , po wystrzeliwanie rakiet.

Cz 2 zajmuje si typami tekstowymi i numerycznymi. Nauczysz si w niej dekodowa tajne wiadomo ci zaszyfrowane metod ROT13, dowiesz si czego o katastro e rakiety Arianne 5 i u yjesz du ych liczb do obliczenia czasu, w jakim wiat o dociera do galaktyki Andromedy.

Cz 3 opisuje funkcje i metody na przyk adzie budowy kcyjnej stacji pogodowej na Marsie odczytuj cej warto ci z czujników i przeliczaj cej temperatury.

Cz 4 mówi, jak u y tablic i map do terraformowania Uk adu S onecznego, przeliczania temperatur i do symulacji gry w ycie Conwaya.

Cz 5 wprowadza do tego jawnie nieobiektowego j zyka koncepcje znane z j zyków obiektowych. Opisuje, jak wykorzystywa struktury i metody do nawigacji po powierzchni Marsa, jak spe nia wymagania interfejsów, aby poprawi wydajno , i jak osadza w sobie struktury, aby tworzy struktury bardziej z o one.

Cz 6 jest po wi cona bardziej technicznym detalom. Opisuje, jak korzysta ze wska ników, które umo liwiaj zmian przekazywanych danych, aby pokona Rycerzy, którzy mówi „nil”, i jak poradzi sobie z b dami w programie bez wywo ywania paniki.

Cz 7 przedstawia prymitywy wspó bie no ci w Go umo liwiaj ce komunikacj mi dzy tysi cami uruchomionych zada na przyk adzie budowy linii produkcyjnej w fabryce obs ugiwanej przez gapowate sus y.

W dodatku do ksi ki znalaz y si rozwi zania wicze , ale pami taj, e najciekawsze b dzie ich samodzielne rozwi zanie!

Informacje o kodzie ród owym

Kod programów zosta wydrukowany czcionk o sta ej szeroko ci, aby odró ni go od zwyk ego tekstu w ksi ce. Wiele listingów zawiera dodatkowe opisy kodu, przekazuj ce wiele istotnych informacji.

Kod ród owy wszystkich listingów z tej ksi ki mo esz pobra ze stron wydawnictwa Manning, pod adresem: www.manning.com/books/get-programming-with-go. Znajduj si tam równie rozwi zania wszystkich wicze z tej ksi ki. Je li wolisz przegl da kod ród owy online, znajdziesz go w repozytorium w serwisie GitHub, pod adresem github.com/nathany/get-programming-with-go.

Chocia mo esz kopiowa i wkleja kod z serwisu GitHub, to zach camy jednak do samodzielnego przepisywania przyk adów. Pozwoli ci to wynie wi cej z tej ksi ki, poniewa pisz c kod samodzielnie, nauczysz si unikania podstawowych b dów i ich poprawiania. Da ci to te wi cej okazji do eksperymentowania z kodem.

Forum dyskusyjne po wi cone tej ksi ce

Zakup ksi ki Zacznij programowanie w Go uprawnia do bezp atnego dost pu do prywatnego forum internetowego prowadzonego przez wydawnictwo Manning Publications, na którym mo na komentowa ksi k , zadawa pytania techniczne, dzieli si rozwi zaniami wicze oraz uzyska pomoc od autorów i od innych u ytkowników. Aby uzyska dost p do tego forum i zapisa si do niego, wejd na stron forums.manning.com/forums/get-programming-with-go. Wi cej o forach wydawnictwa Manning i obowi zuj cych na nich zasadach dowiesz si pod adresem: forums.manning.com/forums/about.

1 LEKCJA

NA MIEJSCA, GOTÓW, START

Po przeczytaniu lekcji 1:

b dziesz wiedzia , co odró nia Go od innych j zyków odwiedzisz „plac zabaw” Go Playground wy wietlisz tekst na ekranie poeksperymentujesz z tekstem w j zyku naturalnym

Go to nowoczesny j zyk programowania chmur obliczeniowych. Firmy takie jak Amazon, Apple, Canonical, Chevron, Disney, Facebook, General Electric, Google, Heroku, Microsoft, Twitch, Verizon i Walmart nale do grona zwolenników j zyka, zdecydowa y si na jego u ycie w wielu powa nych projektach (patrz thenewstack.io/who-is-the-go-developer/ i golang.org/wiki/GoUsers). Obecnie znaczna cz infrastruktury sieciowej przechodzi na Go. Zrobi y to ju takie rmy jak CloudFlare, Cockroach Labs, DigitalOcean, Docker, In uxData, Iron.io, Let’s Encrypt, Light Code Labs, Red Hat CoreOS, SendGrid oraz takie organizacje jak Cloud Native Computing Foundation.

J zyk Go doskonale sprawdza si w centrach danych, ale jego zastosowania nie ograniczaj si wy cznie do zastosowa w korporacjach. Ron Evans i Adrian Zankich opracowali bibliotek Gobot (gobot.io) przeznaczon do sterowania robotami i urzdzeniami. Alan Shreve, jako wiczenie podczas nauki j zyka Go, stworzy narz dzie programistyczne ngrok (ngrok.com), które z czasem przekszta ci o si w pe noprawne komercyjne narz dzie.

Spo eczno zwolenników j zyka Go okre la siebie s owem gophers (sus y). Okre lenie to pochodzi od maskotki j zyka Go – zabawnego sus a (rys. 1.1). Programowanie bywa trudne, ale mamy nadziej , e dzi ki Go i tej ksi ce odkryjesz, na czym polega rado z programowania.

Rysunek 1.1 Suse – maskotka Go zaprojektowana przez Renée French

Podczas tej lekcji poeksperymentujesz z programem w j zyku Go w przegl darce internetowej.

Temat do przemy lenia Gdy mówisz do cyfrowego asystenta „Kup mi pi k ”, czy kupi ci on pi k do koszykówki, czy pomy li, e chcesz przeci rur i potrzebujesz pi ki do metalu? J zyki naturalne, takie jak polski, s pe ne takich niejednoznaczno ci.

W j zykach programowania jednoznaczno jest bardzo wa na, bo je li gramatyka lub sk adnia j zyka nie b d wystarczaj co cis e, to komputer mo e nie zrobi tego, czego od niego oczekujesz. A wtedy programowanie nie b dzie mia o sensu.

Go nie jest j zykiem idealnym, ale zapewnia wi ksz jednoznaczno ni inne j zyki, których u ywali my do tej pory. W trakcie tej lekcji b dziesz musia nauczy si kilku skrótów i przyswoi troch argonu. Mo e nie wszystko b dzie od razu jasne, ale po wi troch czasu, aby pozna , jak dzia a Go i rozwia swoje w tpliwo ci.

1.1 Czym jest Go?

Go to kompilowany j zyk programowania. Aby program napisany w tym j zyku móg zosta uruchomiony, jego kod ród owy musi by najpierw przetworzony przez kompilator, który przet umaczy go na jedynki i zera zrozumia e dla komputerów. W wyniku kompilacji kodu powstaje jeden plik wykonywalny, który mo na potem uruchamia albo dystrybuowa . Kompilator Go analizuje tre kodu ród owego programu i wy apuje literówki i b dy.

Nie wszystkie j zyki programowania stosuj takie podej cie. J zyki takie jak Python, Ruby i jeszcze kilka innych u ywaj interpretera, który t umaczy kolejno instrukcje w trakcie wykonywania programu. Oznacza to, e b dy mog pozosta niewykryte w ró nych cz ciach kodu i nie ujawni si , zanim nie zostan one wykonane.

Jednocze nie interpretery przyspieszaj pisanie kodu i zapewniaj interaktywno , dzi ki czemu interpretowane j zyki programowania s dynamiczne, atwe i przyjemne. J zyki kompilowane maj reputacj statycznych, nieelastycznych machin, które programi ci musz z trudem okie zna , a powolno kompilatorów jest przedmiotem wielu artów. Ale czy tak musi by zawsze?

Chcieli my stworzy j zyk zapewniaj cy bezpiecze stwo i wydajno znan z j zyków kompilowanych statycznie, takich jak C++ i Java i jednocze nie lekko i przyjemno pracy znan z interpretowanych j zyków z typowaniem dynamicznym, takich jak Python.

Rob Pike, Geek of the Week (zobacz mng.bz/jr8y)

J zyk Go zosta stworzony z za o eniem zapewnienia programistom jak najlepszych do wiadcze podczas pisania kodu. Go kompiluje bardzo du e programy w ci gu paru sekund, po wydaniu jednego polecenia. Zrezygnowano w nim z elementów, które wprowadzaj niejednoznaczno ci, i skupiono si na tych, które zach caj do programowania w sposób przewidywalny i które zapewniaj czytelno . Go jest wi c lekk alternatyw dla sztywnej struktury narzucanej przez j zyki klasyczne, takie jak Java.

W Javie zrezygnowano z wielu rzadko u ywanych, s abo rozumianych i myl cych funkcji j zyka C++, które wed ug naszych do wiadcze przynosz wi cej problemów ni korzy ci.

James Gosling, w artykule Java: an Overview Ka dy nowy j zyk programowania rozwija i udoskonala stare idee. W Go wydajne u ywanie pami ci jest atwiejsze i mniej podatne na b dy ni w starszych j zykach. Poza tym Go umie wykorzysta ka dy rdze procesorów wielordzeniowych.

Temat do przemy lenia Co konkretnego widzisz w swoim otoczeniu? Co mo esz z takimi rzeczami zrobi ? Czy to samo mo esz zrobi z czym innym?

Jakie jest wspólne zachowanie (czyli interfejs), jakie one wykazuj ?

24.1 Typ interfejsowy

Typy de niuj przechowywane warto ci: liczby ca kowite, a cuchy itd. Z typem interfejsowym jest inaczej. Interfejsy opisuj , co dany typ mo e zrobi , a nie jego warto ci.

Metody opisuj zachowanie typu, a wi c interfejsy deklaruje si , wskazuj c zbiór metod, które dany typ musi implementowa (mówimy, e dany typ musi „spe nia ” jaki interfejs). Poni szy listing deklaruje zmienn typu interfejsowego.

Listing 24.1 Zbiór metod – talk.go

var t interface { talk() string }

Zmienna t mo e zawiera dowoln warto dowolnego typu, który spe ni tak zde niowany interfejs. Dok adniej, dany typ spe ni wymagania tego interfejsu, je li zadeklaruje metod o nazwie talk bez argumentów, zwracaj c a cuch znaków.

Poni sza lista deklaruje dwa typy, które spe niaj te wymagania.

Listing 24.2 Spe nianie wymaga interfejsu – talk.go

type martian struct{} // marsjanin func (m martian) talk() string { return "bla bla"

}

type laser int // laser func (l laser) talk() string { return strings.Repeat("ziuut", int(l))

}

Chocia martian jest struktur bez pól, a laser jest liczb ca kowit , to oba typy udost pniaj metod talk i dlatego mog zosta przypisane do zmiennej t, co pokazuje poni szy listing.

Listing 24.3 Polimor zm – talk.go

var t interface { talk() string

}

t = martian{}

fmt.Println(t.talk())

t = laser(3)

fmt.Println(t.talk())

Wy wietli: bla bla

Wy wietli: ziuut ziuut ziuut

Dziwna, bezkszta tna zmienna t mo e raz przyj posta marsjanina, a innym razem lasera. Informatycy twierdz , e interfejsy zapewniaj polimor zm, czyli „zdolno przyjmowania wielu postaci”.

ZIUUT! Z I U U T !

ZIUUT! Z I U U T ! BLA! B L A ! BLA! B L A !

UWAGA W przeciwie stwie do Javy, w j zyku Go deklaracje martian i laser w aden sposób nie informuj , e implementuj interfejs. Korzy ci z tego zostan omówione w dalszej cz ci tej lekcji.

Zazwyczaj interfejsy deklaruje si jako typy nazwane, które mo na ponownie wykorzysta . Zaleca si tu u ycie konwencji nazewniczej dla typów interfejsów, która polega na dodawaniu przyrostka -er (w j zyku polskim by by to -arz): a wi c baker (piekarz), czyli kto , kto umie piec (bake). Na poni szym listingu mamy interfejs talker, który wymaga metody talk.

Listing 24.4 Typ talker – shout.go

type talker interface { talk() string }

Podsumowanie

CO DALEJ?

To ju koniec tej ksi ki, ale jeszcze nie koniec twojej podró y. Mamy nadziej , e dzi ki niej wpadniesz na wiele pomys ów i nabierzesz ch ci do dalszej nauki i do tworzenia. Dzi kujemy za do czenie do nas!

Czego nie powiedzieli my

Go to stosunkowo ma y j zyk i w wi kszo ci ju go pozna e . Ale jest kilka spraw, których ta ksi ka w tym wydaniu nie porusza:

Nie opisali my deklarowania sta ych sekwencyjnych za pomoc przydatnego s owa kluczowego iota.

Nie wspomnieli my o operatorach przesuni cia bitowego (<< i >>) ani o operatorach bitowego iloczynu (&) i sumy (|).

Lekcja 3 opisuje p tle, ale pomin li my s owo kluczowe continue i s owo kluczowe goto oraz etykiety.

Lekcja 4 jest po wi cona zasi gowi, ale pomin li my kwesti przes aniania zmiennych.

Lekcje od 6 do 8 wykorzystuj liczby zmiennoprzecinkowe, ca kowite i typy dla du ych warto ci, ale pomin li my liczby zespolone i urojone.

Lekcja 12 opisuje s owo kluczowe return , ale pomin li my jego u ycie bez zwracanej warto ci.

Lekcja 12 wspomina o pustym interfejsie interface{}, ale tylko pobie nie.

Lekcja 13 przedstawia metody, ale nie powiedzieli my o warto ciach metod.

Lekcja 28 wspomina o asercjach typu, ale nie wspomina o instrukcji switch w wersji rozró niaj cej typy.

Lekcja 30 nie wspomina o kana ach kierunkowych.

Nie opisali my inicjowania za pomoc init, czyli specjalnej funkcji, podobnej do main.

Nie przedstawili my szczegó owych informacji o wszystkich wbudowanych funkcjach, jak new dla wska ników i copy dla wycinków (zobacz golang.org/ pkg/builtin/).

Nie wyja nili my, jak pisa nowe pakiety, aby uporz dkowa kod lub umo liwi jego udost pnianie innym.

Poza placem zabaw

Je li dopiero zaczynasz programowanie, to zapewne podoba ci si internetowa platforma Go Playground, ale musisz wiedzie , e ten plac zabaw ma pewne ograniczenia. Aby uwolni si od nich i pisa bardziej powa ne programy, musisz zainstalowa Go na swoim komputerze (zobacz golang.org/dl/). Otwarcie okna terminalu i korzystanie z wiersza polece przypomina troch cofni cie si w czasie o kilka dekad, wi c naucz si porusza po komputerze w ten sposób i uruchamia programy tak, jak si to robi o w 1995 roku!

B dziesz tak e potrzebowa edytora tekstu. My u ywali my edytorów Sublime Text i Acme, ale dost pnych jest wiele innych edytorów z dobrym wsparciem dla Go (zobacz golang.org/doc/editors.html). Pr dzej czy pó niej b dziesz potrzebowa te narz dzia do kontroli wersji, takiego jak git, które dzia a troch jak wehiku czasu, ale na szcz cie tylko w odniesieniu do kodu i innych plików.

To nie wszystko

Go to znacznie wi cej ni j zyk programowania. Wokó niego powsta bogaty ekosystem narz dzi i bibliotek, które czekaj , a je odkryjesz. Pomag ci one niemal we wszystkim: w zautomatyzowanych testach, w debugowaniu, w testach wydajno ci i w wielu innych sprawach. Biblioteka standardowa ma te bardzo du o pakietów, które warto pozna . A je li poznasz ju wszystko, to pamitaj, e spo eczno sus ów ca y czas pracuje nad wieloma niezale nymi pakietami zaspokajaj cymi bardzo zró nicowane potrzeby (zobacz godoc.org).

W Internecie dost pnych jest wiele zasobów (zobacz golang.org/wiki), które pomog ci w dalszej nauce. Dost pnych jest te wiele ksi ek, cho by takich jak: Go in Practice, Go Web Programming oraz Go in Action (zobacz golang.org/wiki/Books).

Nauka nigdy si nie ko czy, a wi c baw si i ucz! Razem ze spo eczno ci Go gor co ci do tego zach camy!

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.