0
Go	
  ahead,	
  make	
  my	
  day.	
  
Intro	
  to	
  Go	
  programming	
  language	
  
Me	
  
@torkale	
  
	
  
h8p://github.com/torkale	
  
	
  
torkale[at]gmail	
  
Why	
  Go?	
  
Challenge	
  

Safety	
  &	
  
Performance	
   Expressiveness	
  
&	
  Convenience	
  
Mascot	
  
Performance	
  
Type	
  safety	
  
Concurrency	
  
Scalability	
  
ProducKvity	
  

AL	
  
Respected	
  Parents	
  
Ken	
  Thompson	
  
Unix,	
  B,	
  UTF-­‐8,	
  Plan	
  9	
  
	
  
	
  
Rob	
  Pike	
  
Plan	
  9,...
History	
  

Rob	
  Pike	
  

Ken	
  Thompson	
  

Robert	
  Griesmer	
  

Start	
  
Late	
  2007	
  

Public	
  	
  
2009...
Hello	
  
package	
  main	
  
	
  
import	
  "fmt"	
  
	
  
func	
  greet()	
  {	
  
	
  fmt.Println("Hello,	
  I	
  love	...
Web	
  Server	
  
package	
  main	
  
	
  
import	
  (	
  
	
  	
  	
  	
  "fmt"	
  
	
  	
  	
  	
  "net/h8p"	
  
)	
  
	...
Basic	
  types	
  
DeclaraKons	
  
CondiKons	
  
Loops	
  
Slice	
  
Map	
  

BASICS	
  
Basic	
  Types	
  
bool	
  
	
  
string	
  
	
  
int	
  	
  int8	
  	
  int16	
  	
  int32	
  	
  int64	
  
uint	
  uint8	...
DeclaraKons	
  
var	
  i	
  int	
  
i	
  =	
  getInteger()	
  
	
  
j	
  :=	
  getInteger()	
  
	
  
value,	
  err	
  :=	
...
CondiKons	
  
var	
  even	
  bool	
  
	
  
if	
  x%2	
  ==	
  0	
  {	
  
	
  	
  	
  	
  even	
  =	
  true	
  
}	
  
	
  
...
Loops	
  
factorial	
  :=	
  1	
  
for	
  i	
  :=	
  2;	
  i	
  <=	
  num;	
  i++	
  {	
  
	
  	
  	
  	
  factorial	
  *=...
Slice	
  
primes	
  :=	
  []int{2,	
  3,	
  5,	
  7,	
  11,	
  13}	
  
	
  
fmt.Println("primes[1:4]	
  ==",	
  primes[1:4...
Map	
  
m	
  :=	
  make(map[string]int)	
  
m["Ten"]	
  =	
  10	
  
fmt.Println(m)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
 ...
Custom	
  types	
  
Extension	
  via	
  composiKon	
  
Methods	
  

TYPES	
  
Custom	
  Types	
  
type	
  Name	
  string	
  
	
  
type	
  Person	
  struct	
  {	
  
	
  	
  	
  	
  first	
  Name	
  
	
 ...
Methods	
  
func	
  (dude	
  Person)	
  FullName()	
  string	
  {	
  
	
  	
  	
  	
  return	
  fmt.Sprine("%s	
  %s",	
  ...
AbstracKon	
  
Duck	
  typing	
  
Signatures	
  
Implicit	
  

INTERFACES	
  
interfaces	
  
type	
  Talker	
  interface	
  {	
  
	
  	
  	
  	
  Talk()	
  string	
  
}	
  
	
  
func	
  (dude	
  Perso...
Higher-­‐order	
  funcKons	
  
Custom	
  funcKon	
  types	
  
Closures	
  
MulKple	
  return	
  values	
  

FUNCTIONS	
  
FuncKons	
  
type	
  PersonAcKon	
  func(some	
  Person)	
  Name	
  
	
  
func	
  (crowd	
  Crowd)	
  ConcatPersonAcKons(a...
defer	
  
func	
  MeasureStart(label	
  string)	
  (string,	
  Kme.Time)	
  {	
  
	
  	
  	
  	
  return	
  label,	
  Kme....
CSP	
  
go-­‐rouKne	
  
channels	
  
select	
  

CONCURRENCY	
  
CommunicaKng	
  SequenKal	
  Processes	
  	
  
“Do	
  not	
  communicate	
  by	
  sharing	
  memory;	
  
instead	
  share	...
go	
  rouKnes	
  
var	
  a	
  string	
  
	
  
func	
  Init()	
  {	
  
	
  	
  a	
  =	
  "finally	
  started"	
  
	
  	
  re...
tradiKonal	
  
var	
  (	
  
	
  	
  a	
  string	
  
	
  	
  wg	
  sync.WaitGroup	
  
)	
  
	
  
func	
  Init()	
  {	
  
	
...
channel	
  
package	
  channel	
  
	
  
var	
  (	
  
	
  	
  a	
  string	
  
	
  	
  ready	
  chan	
  bool	
  
)	
  
	
  
...
Producer	
  /	
  Consumer	
  
func	
  producer(c	
  chan	
  string){	
  
	
  	
  defer	
  close(c)	
  
	
  	
  for	
  {	
 ...
Producer	
  /	
  Consumer	
  
func	
  producer(c	
  chan	
  string){	
  
	
  	
  defer	
  close(c)	
  
	
  	
  for	
  {	
 ...
Barber	
  Shop	
  
Var	
  	
  
	
  	
  seats	
  =	
  make(chan	
  Customer,	
  2)	
  
	
  	
  customers	
  :=	
  []Custome...
version	
  
build	
  
test	
  
get	
  

install 	
  	
  
fmt	
  
…	
  
build	
  -­‐-­‐race	
  (1.1+)	
  

GO	
  COMMAND	
 ...
h8p://golang.org/	
  
h8p://tour.golang.org/	
  
h8ps://code.google.com/p/go-­‐wiki/wiki/Projects	
  
h8ps://groups.google...
Go ahead, make my day
Upcoming SlideShare
Loading in...5
×

Go ahead, make my day

430

Published on

An introduction to the go programming language, emphasizing concurrency.

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
430
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Go ahead, make my day"

  1. 1. Go  ahead,  make  my  day.   Intro  to  Go  programming  language  
  2. 2. Me   @torkale     h8p://github.com/torkale     torkale[at]gmail  
  3. 3. Why  Go?  
  4. 4. Challenge   Safety  &   Performance   Expressiveness   &  Convenience  
  5. 5. Mascot   Performance   Type  safety   Concurrency   Scalability   ProducKvity   AL  
  6. 6. Respected  Parents   Ken  Thompson   Unix,  B,  UTF-­‐8,  Plan  9       Rob  Pike   Plan  9,  UTF-­‐8,  Limbo,  Unix  team   The  Unix  Programming  Environment   The  PracKce  of  Programming  
  7. 7. History   Rob  Pike   Ken  Thompson   Robert  Griesmer   Start   Late  2007   Public     2009   Go  1.0   March  2012   Go  1.1   May  2013  
  8. 8. Hello   package  main     import  "fmt"     func  greet()  {    fmt.Println("Hello,  I  love  you,  won’t  you  tell  me  your  name?”)   }     func  main()  {    greet()   }  
  9. 9. Web  Server   package  main     import  (          "fmt"          "net/h8p"   )     func  handler(w  h8p.ResponseWriter,  r  *h8p.Request)  {          fmt.Fprine(w,  ”Request  from  %s",  r.URL.Path[1:])   }     func  main()  {          h8p.HandleFunc("/",  handler)          h8p.ListenAndServe(":8080",  nil)   }  
  10. 10. Basic  types   DeclaraKons   CondiKons   Loops   Slice   Map   BASICS  
  11. 11. Basic  Types   bool     string     int    int8    int16    int32    int64   uint  uint8  uint16  uint32  uint64  uintptr     byte  //  alias  for  uint8     rune  //  alias  for  int32            //  represents  a  Unicode  code  point     float32  float64     complex64  complex128  
  12. 12. DeclaraKons   var  i  int   i  =  getInteger()     j  :=  getInteger()     value,  err  :=  getValueOrError()     value2,  _  :=  getValueOrError()  
  13. 13. CondiKons   var  even  bool     if  x%2  ==  0  {          even  =  true   }     if  x%2  ==  0  {          even  =  true   }  else  {          even  =  false   }     if  mod  :=  x%2;  mod  ==  0  {          even  =  true   }  
  14. 14. Loops   factorial  :=  1   for  i  :=  2;  i  <=  num;  i++  {          factorial  *=  i   }     nextPowerOf2  :=  1   for  nextPowerOf2  <  num  {          nextPowerOf2  *=2   }     for  {          //  Forever   }  
  15. 15. Slice   primes  :=  []int{2,  3,  5,  7,  11,  13}     fmt.Println("primes[1:4]  ==",  primes[1:4])     zeroes  :=  make([]int,  5)   fmt.Println("zeroes  ==",  zeroes)     for  i,  v  :=  range  primes  {            fmt.Prine("(%d)  =  %dn",  i,  v)   }   for  _,  v  :=  range  primes  {            fmt.Prine("%dn",  v)   }  
  16. 16. Map   m  :=  make(map[string]int)   m["Ten"]  =  10   fmt.Println(m)                                                                                                 capitals  :=  map[string]string{      "Jerusalem":  "Israel",      "Paris":  "France",      "London":  "UK",   }   fmt.Println(capitals)                                                                                                 delete(capitals,  "London")   v,  present  :=  capitals["London"]   fmt.Println("The  capital:",  v,  "Present?",  present)  
  17. 17. Custom  types   Extension  via  composiKon   Methods   TYPES  
  18. 18. Custom  Types   type  Name  string     type  Person  struct  {          first  Name          last    Name   }     type  Hero  struct  {          Person          power  string   }     type  Crowd  struct  {          people  []Person   }  
  19. 19. Methods   func  (dude  Person)  FullName()  string  {          return  fmt.Sprine("%s  %s",  dude.first,  dude.last)   }     func  (dude  Person)  SetFirst(name  Name)  {          dude.first  =  name   }     func  (h  *Hero)  ToString()  string  {          return  fmt.Sprine("Name:  %s  Power:  %s",  h.FullName(),  h.power)   }     func  NewPerson(f,  l  Name)  Person  {          return  Person{f,  l}   }  
  20. 20. AbstracKon   Duck  typing   Signatures   Implicit   INTERFACES  
  21. 21. interfaces   type  Talker  interface  {          Talk()  string   }     func  (dude  Person)  Talk()  string  {          return  fmt.Sprine("My  name  is  %s",  dude.FullName())   }     func  MakeSomeoneTalk(talker  Talker)  string  {          return  talker.Talk()   }     func  interfaces()  {          fmt.Println(MakeSomeoneTalk(NewPerson("Robert",  "de  Niro")))   }  
  22. 22. Higher-­‐order  funcKons   Custom  funcKon  types   Closures   MulKple  return  values   FUNCTIONS  
  23. 23. FuncKons   type  PersonAcKon  func(some  Person)  Name     func  (crowd  Crowd)  ConcatPersonAcKons(acKon  PersonAcKon)  string  {          var  result  string          for  _,  dude  :=  range  crowd.people  {                  result  =  fmt.Sprine("%s  %s",  result,  acKon(dude))          }          return  result   }     func  AllLastNames(crowd  Crowd)  string  {          return  crowd.ConcatPersonAcKons(func(dude  Person)  Name  {                  return  dude.last          })   }  
  24. 24. defer   func  MeasureStart(label  string)  (string,  Kme.Time)  {          return  label,  Kme.Now()   }     func  Measure(label  string,  startTime  Kme.Time)  {          duraKon  :=  Kme.Now().Sub(startTime)          fmt.Println(label,  "ComputaKon  took",  duraKon)   }     func  benchmark()  {          defer  Measure(MeasureStart("benchmark()"))          Kme.Sleep(Kme.Second)   }  
  25. 25. CSP   go-­‐rouKne   channels   select   CONCURRENCY  
  26. 26. CommunicaKng  SequenKal  Processes     “Do  not  communicate  by  sharing  memory;   instead  share  memory  by  communicaKng”  
  27. 27. go  rouKnes   var  a  string     func  Init()  {      a  =  "finally  started"      return   }     func  doSomethingElse()  {      //  …   }     func  Simple()  string{      go  Init()      doSomethingElse()      return  a   }  
  28. 28. tradiKonal   var  (      a  string      wg  sync.WaitGroup   )     func  Init()  {      defer  wg.Done()      a  =  "finally  started"   }     func  Simple()  string{      wg.Add(1)      go  Init()      wg.Wait()      //  do  something  else      return  a   }  
  29. 29. channel   package  channel     var  (      a  string      ready  chan  bool   )     func  Init()  {      a  =  "finally  started"      ready  <-­‐  true   }     func  Simple()  string{      ready  =  make(chan  bool)      go  Init()        //  do  something  else      <-­‐ready      return  a   }  
  30. 30. Producer  /  Consumer   func  producer(c  chan  string){      defer  close(c)      for  {          work  :=  getWork()          c  <-­‐  work      }   }       func  consumer(c  chan  string)  {      for  msg  :=  range  c  {              process(msg)      }   }     func  ProducerConsumer()  {      c  :=  make(chan  string)      go  producer(c)      consumer(c)   }  
  31. 31. Producer  /  Consumer   func  producer(c  chan  string){      defer  close(c)      for  {          work  :=  getWork()          c  <-­‐  work      }   }       func  consumer(c  chan  string,  abort  <-­‐chan  Kme.Time)  {      for  {          select  {          case  msg  :=  <-­‐c:              process(msg)          case  <-­‐  abort:              return          }      }   }     func  ProducerConsumer()  {      c  :=  make(chan  string)      go  producer(c)            abort  :=  Kme.A|er(2*Kme.Second)      consumer(c,  abort)   }  
  32. 32. Barber  Shop   Var        seats  =  make(chan  Customer,  2)      customers  :=  []Customer{  "Al",  "Bob",  "Chad",  "Dave"  }   )     func  barber()  {      for  {          c  :=  <-­‐seats          fmt.Println("Barber  shaving",  c)      }   }     func  (c  Customer)  enter()  {      select  {      case  seats  <-­‐  c:      default:          fmt.Println("Customer",  c,  "Leaves")      }   }     func  BarberShop()  {      go  barber()      for  _,  c  :=  range  customers  {          go  c.enter()      }   }  
  33. 33. version   build   test   get   install     fmt   …   build  -­‐-­‐race  (1.1+)   GO  COMMAND  
  34. 34. h8p://golang.org/   h8p://tour.golang.org/   h8ps://code.google.com/p/go-­‐wiki/wiki/Projects   h8ps://groups.google.com/forum/#!forum/golang-­‐nuts   #go-­‐nuts  on  irc.freenode.net   h8ps://www.facebook.com/groups/golanggonuts  
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×