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.
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!