SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
LET'S GO!
Go is a programming language designed
by Google to help solve Google's problems,
and Google has big problems.
Rob Pike, co-author, SPLASH 2012
U gógla w 2007 roku, przykładowy projekt:
kod w C - 2000 plików
4,2MB kodu źródłowego
8GB z zależnościami
build time w rozproszonym środowisku: 45min
źródło: talks.golang.org/2012/splash.article
GO, CZERPIE Z:
C
Python
occam
Limbo, Newsqueak
Pascal i podobne
JEST TO JĘZYK:
proceduralny
kompilowany
strukturalny
współbieżny
imperatywny
statycznie silnie typowany
OD 6 LAT NA RYNKU
Wiele platform
kompilowany do pojedynczej binarki
Ostatnio duży boom, co widać po statystykach i
repozytoriach na GitHub.
15 miejsce w rankingu popularności, zaraz obok Scali i
przed Clojure
Znam ludzi którzy przeszli z Ruby do pisania w Go. (Dynport)
źródło: redmonk.com/sogrady/2015/07/01/language-
rankings-6-15/
CO I JAK:
Szybki:
1-2 x szybszy od Pythona
~10-20% wolniejszy od Javy
choć niektóre corner-case’y z przewagą dla Go
Małe wymogi pamięciowe
mini appka serwerowa ~1,3MB
Ale binarki potrafią swoje ważyć - 6,2MB
Skromny zestaw podstawowej gramatyki:
if/else
for
switch
type switch
Brak operatorów innych niż matematyczne, bitowe i
logiczne:
+ - * / %
| & ^ << >> &^
== != < > <= >=
&& || !
dodatkowo: * & <- (do wskaźników i kanałów)
Wbudowane typy danych:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128
error
Rzutowanie typów explicit
Można definiować własne typy na bazie istniejących
Funkcje traktowane na prawach zmiennych
możliwe anonimowe oraz domknięcia (ang. closures)
Brak wyjątków
ale ma multi-return-value dla funkcji
Odwlekanie w czasie: `defer
prawie jak javascriptowy setTimeout(..., 0)
Struktury danych:
array
slice
map
struct z metodami
Ma wskaźniki, ale bez arytmetyki
Ma interfejsy, rozwiązywane na poziomie kompilacji lub
runtime-u
Brak dziedziczenia, ale ma zagnieżdżanie typów (type-
embedding)
Współbieżność wbudowana:
goroutines i typ channel
Brak wersjonowania paczek (ang. package)
ale możliwe zaciąganie zależności (ang. import) np.
prosto z githuba/bitbucketa
Ma GC (garbage collector)
parallel mark-and-sweep
Wbudowane uruchamianie testów, ale nie ma asercji.
Sporo narzędzi, do profilowania kodu i code-coverage
Jeden styl formatowania: go fmt
wbudowany w kompilator formater (niestety oparty ma
tabach width=8 :/)
REAL CODE
https://github.com/RaVbaker/uploader-server-go
PYTANIA?
FAJNE LINKI:
- czemu
lepiej nie
- 2 lata doświadczeń
https://github.com/a8m/go-lang-cheat-sheet/
http://tour.golang.org/
https://golang.org/doc/effective_go.html
http://golang-examples.tumblr.com
http://blog.codeship.com/testing-in-go/
https://news.ycombinator.com/item?id=7660924
http://www.darkcoding.net/software/go-lang-after-four-
months/
DZIĘKI!
Twitter: GitHub:@RaVbaker RaVbaker

Contenu connexe

Similaire à Let's Go! - wprowadzenie do Go

Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodupabloware
 
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCA
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCAPRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCA
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCAArtur Gunia
 
Jak wnieść wkład w Open Source?
Jak wnieść wkład w Open Source?Jak wnieść wkład w Open Source?
Jak wnieść wkład w Open Source?Tomasz Bak
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Nowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyNowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyMarcinStachniuk
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Natalia Stanko
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future ProcessingPROIDEA
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Codesushi.co (CODESUSHI LLC)
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETMikołaj Olszewski
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuWydawnictwo Helion
 
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...PROIDEA
 
Erlang
ErlangErlang
Erlangkonryd
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Semihalf
 

Similaire à Let's Go! - wprowadzenie do Go (20)

Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Tworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego koduTworzenie i utrzymywanie czystego kodu
Tworzenie i utrzymywanie czystego kodu
 
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCA
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCAPRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCA
PRZEGLĄD NARZĘDZI W WARSZTACIE OTWARTEGO NAUKOWCA
 
Jak wnieść wkład w Open Source?
Jak wnieść wkład w Open Source?Jak wnieść wkład w Open Source?
Jak wnieść wkład w Open Source?
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Nowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyNowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programisty
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Michał Dudak, Future Processing
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
University day 2
University day 2University day 2
University day 2
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
university day 1
university day 1university day 1
university day 1
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
 
C++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładuC++. Potęga języka. Od przykładu do przykładu
C++. Potęga języka. Od przykładu do przykładu
 
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...
 
Python. Od podstaw
Python. Od podstawPython. Od podstaw
Python. Od podstaw
 
Erlang
ErlangErlang
Erlang
 
Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
 

Let's Go! - wprowadzenie do Go

  • 1. LET'S GO! Go is a programming language designed by Google to help solve Google's problems, and Google has big problems. Rob Pike, co-author, SPLASH 2012
  • 2. U gógla w 2007 roku, przykładowy projekt: kod w C - 2000 plików 4,2MB kodu źródłowego 8GB z zależnościami build time w rozproszonym środowisku: 45min źródło: talks.golang.org/2012/splash.article
  • 3. GO, CZERPIE Z: C Python occam Limbo, Newsqueak Pascal i podobne
  • 5. OD 6 LAT NA RYNKU Wiele platform kompilowany do pojedynczej binarki Ostatnio duży boom, co widać po statystykach i repozytoriach na GitHub. 15 miejsce w rankingu popularności, zaraz obok Scali i przed Clojure Znam ludzi którzy przeszli z Ruby do pisania w Go. (Dynport) źródło: redmonk.com/sogrady/2015/07/01/language- rankings-6-15/
  • 6. CO I JAK: Szybki: 1-2 x szybszy od Pythona ~10-20% wolniejszy od Javy choć niektóre corner-case’y z przewagą dla Go Małe wymogi pamięciowe mini appka serwerowa ~1,3MB Ale binarki potrafią swoje ważyć - 6,2MB
  • 7.
  • 8. Skromny zestaw podstawowej gramatyki: if/else for switch type switch Brak operatorów innych niż matematyczne, bitowe i logiczne: + - * / % | & ^ << >> &^ == != < > <= >= && || ! dodatkowo: * & <- (do wskaźników i kanałów)
  • 9. Wbudowane typy danych: bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte rune float32 float64 complex64 complex128 error Rzutowanie typów explicit Można definiować własne typy na bazie istniejących
  • 10. Funkcje traktowane na prawach zmiennych możliwe anonimowe oraz domknięcia (ang. closures) Brak wyjątków ale ma multi-return-value dla funkcji Odwlekanie w czasie: `defer prawie jak javascriptowy setTimeout(..., 0)
  • 11. Struktury danych: array slice map struct z metodami Ma wskaźniki, ale bez arytmetyki Ma interfejsy, rozwiązywane na poziomie kompilacji lub runtime-u Brak dziedziczenia, ale ma zagnieżdżanie typów (type- embedding)
  • 13. Brak wersjonowania paczek (ang. package) ale możliwe zaciąganie zależności (ang. import) np. prosto z githuba/bitbucketa Ma GC (garbage collector) parallel mark-and-sweep
  • 14. Wbudowane uruchamianie testów, ale nie ma asercji. Sporo narzędzi, do profilowania kodu i code-coverage Jeden styl formatowania: go fmt wbudowany w kompilator formater (niestety oparty ma tabach width=8 :/)
  • 17. FAJNE LINKI: - czemu lepiej nie - 2 lata doświadczeń https://github.com/a8m/go-lang-cheat-sheet/ http://tour.golang.org/ https://golang.org/doc/effective_go.html http://golang-examples.tumblr.com http://blog.codeship.com/testing-in-go/ https://news.ycombinator.com/item?id=7660924 http://www.darkcoding.net/software/go-lang-after-four- months/