go is your friend

Post on 06-Sep-2014

247 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Go, also called golang, is a programming language developed at Google in 2007 and publicly released in 2009. Combined with App Engine AND the AngularJS framework, golang represents the backend solution which completes Google's "developer suite". In spite of its youth, it includes a bunch of powerful features with a low learning curve and great performances, for any desktop platform.

TRANSCRIPT

ROME April 11-12th 2014

Go is your friend

Gianfranco Reppucci Lead Developer at Qurami

giefferre

ROME April 11-12th 2014 - Gianfranco Reppucci

About me

ROME April 11-12th 2014 - Gianfranco Reppucci

ROME April 11-12th 2014 - Gianfranco Reppucci

Evolution

As developers, we’ve changed a lot since a decade ago

ROME April 11-12th 2014 - Gianfranco Reppucci

Evolution

• Monolithic, 100% custom code • Super-complete, MVC frameworks

with tons of built-in features • Simple, bootstrapping frameworks

w/ dependency managers

ROME April 11-12th 2014 - Gianfranco Reppucci

Context

• There is a lot of different languages available to developers • Some of them are pretty easy, some

others have great performances • We can find frameworks and plugins for

each of them

ROME April 11-12th 2014 - Gianfranco Reppucci

The big dilemma

I’m starting a new project. Which technology do you think I should use?

ROME April 11-12th 2014 - Gianfranco Reppucci

There’s no right choice

As developers: • A great idea can be built with

(perhaps) any language • Pros and cons are everywhere • You’ll pay a certain price for whatever

advantages you could have

ROME April 11-12th 2014 - Gianfranco Reppucci

There’s no right choice

As entrepreneurs: • When choosing a specific technology,

you’ll probably need to justify the decision to yourself, your partners and investors

• Decisions would be based on company’s vision

ROME April 11-12th 2014 - Gianfranco Reppucci

Start usingsomething modern

Go is an open source programming language that makes it easy to build simple,

reliable and efficient software.

quote from golang.org

ROME April 11-12th 2014 - Gianfranco Reppucci

What Go is:

• Open source BSD licensed project • Language specification • Runtime components

(garbage collector, scheduler, etc) • Two different compilers (gc or gccgo) • Standard libraries • Documentation

ROME April 11-12th 2014 - Gianfranco Reppucci

History

• Developed at Google in 2007 as an experiment • Publicly announced in 2009 • Integrated in App Engine in 2011

ROME April 11-12th 2014 - Gianfranco Reppucci

Who is using Go?

ROME April 11-12th 2014 - Gianfranco Reppucci

Who is using Go?

ROME April 11-12th 2014 - Gianfranco Reppucci

A modern C

Go sits somewhere between C and Python. !

It has the static type checking and bit-twiddling powers of C, yet much of the speed of development and conciseness of Python.

quote from Graham King

ROME April 11-12th 2014 - Gianfranco Reppucci

Absolutely genuine

• No class inheritance • No method or operator overloading • No circular dependencies among packages • No generic programming • No assertions • No pointer arithmetic

ROME April 11-12th 2014 - Gianfranco Reppucci

Performance driven

Built-in concurrency primitives: • light-weight threads, called goroutines • channels • select statements

ROME April 11-12th 2014 - Gianfranco Reppucci

I mean, seriously

ROME April 11-12th 2014 - Gianfranco Reppucci

I mean, seriously

ROME April 11-12th 2014 - Gianfranco Reppucci

I mean, seriously

ROME April 11-12th 2014 - Gianfranco Reppucci

Does God exist?

• If you have doubts or issues when styling your Go code, you can use gofmt • gofmt’s aim is to format Go files,

returning a valid and “beautified” version of the code

ROME April 11-12th 2014 - Gianfranco Reppucci

A little bit of code

ROME April 11-12th 2014 - Gianfranco Reppucci

Object Oriented Go

ROME April 11-12th 2014 - Gianfranco Reppucci

A type declaration

! type Name struct {!! ! First string!! ! Middle string!! ! Last string!! }

ROME April 11-12th 2014 - Gianfranco Reppucci

A method declaration

! func (n Name) String() string {!

! ! return fmt.Sprintf(!

! ! ! “%s %c. %s”,!

! ! ! n.First,!

! ! ! n.Middle[0],!

! ! ! n.Last,!

! ! )!

! }

ROME April 11-12th 2014 - Gianfranco Reppucci

Instancing a Name

! aName := Name{“John”, “Go”, “White”}!!! fmt.Println(aName.String())

ROME April 11-12th 2014 - Gianfranco Reppucci

Goroutines

ROME April 11-12th 2014 - Gianfranco Reppucci

Given the yell function

func yell(word string, seconds int) {!

! time.Sleep(time.Duration(seconds) * time.Second)!

! fmt.Println(word)!

}

ROME April 11-12th 2014 - Gianfranco Reppucci

Guess what’s the output

func main() {!! go yell(“2014”, 5)!! go yell(“Codemotion”, 1)!! go yell(“Roma”, 4)!! time.Sleep(10 * time.Second)! }

ROME April 11-12th 2014 - Gianfranco Reppucci

Channels

ROME April 11-12th 2014 - Gianfranco Reppucci

Channels

• Implement parallelism and synchronization • Channels can be of any type of data

structure, even custom structs • Can be buffered or unbuffered

ROME April 11-12th 2014 - Gianfranco Reppucci

An example

c := make(chan int)!

! go func() {!

! list.Sort()!

! c <- 1!

}()!

! doSomethingForAWhile()!

<-c

ROME April 11-12th 2014 - Gianfranco Reppucci

Select statement

ROME April 11-12th 2014 - Gianfranco Reppucci

Select

The select statement is like a switch, but it selects over channel operations andchooses exactly one of them

ROME April 11-12th 2014 - Gianfranco Reppucci

An example ticker := time.NewTicker(250 * time.Millisecond)! boom := time.After(1 * time.Second)!! for {!! select {!! ! case <- ticker.C:!! ! ! fmt.Println(“tick”)!! ! case <- boom:!! ! ! fmt.Println(“BOOM!”)!! ! ! return!! }! }

ROME April 11-12th 2014 - Gianfranco Reppucci

Start writing yourGo code now

Open your browser and point it to

http://tour.golang.org

for a quick tour, or

http://play.golang.org

to test your own snippets online

ROME April 11-12th 2014 - Gianfranco Reppucci

Why should I use Go?

• Syntax and environments are similar to dynamic languages • Simple language specification • Powerful and lightweight

ROME April 11-12th 2014 - Gianfranco Reppucci

Why should I use Go?

• Full development environment (doc, dependencies, formatter, tests) • Static compilation

with NO dependencies binary output • Multi environment build

ROME April 11-12th 2014 - Gianfranco Reppucci

So, what’s Go about?

ROME April 11-12th 2014 - Gianfranco Reppucci

Composition

• Go is Object Oriented, BUT not in the usual way! • Simple data models, simple interfaces

ROME April 11-12th 2014 - Gianfranco Reppucci

Concurrency

• Easily readable concurrency primitives

ROME April 11-12th 2014 - Gianfranco Reppucci

Gophers

ROME April 11-12th 2014 - Gianfranco Reppucci

ROME April 11-12th 2014 - Gianfranco Reppucci

Join us tonight

GOLANGIT Meetup

18:40 - 19.40

ROME April 11-12th 2014 - Gianfranco Reppucci

Thank you!

Gianfranco Reppucci

giefferre

ROME April 11-12th 2014 - Gianfranco Reppucci

References

• The gopher images were created by Renee French and they are Creative Commons Attribution 3.0 licensed

• What technology should my startup use? by Matt Aimonetti

• Go after four months by Graham King • Golang on Google’s App Engine

ROME April 11-12th 2014 - Gianfranco Reppucci

References

• List of organizations that use Go • The gopher look, a photo by Ken Conley • How we went from 30 servers to 2 by Travis

Reeder • Go after 2 years in production by Travis

Reeder • Computer Language Benchmarks Game

ROME April 11-12th 2014 - Gianfranco Reppucci

References

• Go at Google • Docker and Go: why did we decide to write

docker in Go?

top related