Why to go for Go
UTTAM GANDHI
CONNECT WITH UTTAM ON LINKEDIN
About Me
C, C++ Developer for last 11 years
Hands on in Javascript, python, ruby, MongoDB
Working with Synerzip for Since July 2011 on a C++
project
History of Go
Robert Griesemer, Rob Pike and Ken Thompson
started the idea on Sep 21, 2007
It became an open source project on Nov 10, 2009
Why Go
Without go one has to choose between efficient
compilation, efficient execution, or ease of programming
Go combines best of static language and dynamic
language
Compilation is really fast
Go is Garbage collected, concurrent execution and
communication
Scalable, efficient and productive ( C like)
Go aims to be system programming language for multi
core machine
Comparison with C++, Java and Javascript
C++
Java
Javascript
Go
Typesafe
Garbage
Collection
Compilation
Slow
Slow
NA
Very Fast
Concurrency
Ease of
programming
Efficiency
Highest
Slow
Slowest
Close to C++
Hello World
// hello.go!
package main!
import (!
"fmt!
)!
func main() { !
fmt.Println("Hello World)!
}!
Sample function
package main!
Import fmt!
func split(sum int) (x, y int) {!
x = sum * 4 / 9!
y = sum - x!
return!
}!
func main() {!
var x, y, z int!
fmt.Println(x,y,z)!
fmt.Println(split(17))!
}!
How to Write Go Code 1/2
Go tool is designed to work with open source code
maintained in public repositories
Workspace
src
pkg
bin
export GOPATH=$HOME/go!
go install hello!
How to Write Go Code 2/2
go install sum (create and put lib pkg)!
go install usinglib !
go get code.google.com/p/go.example/
hello!
go test sum!
Object Oriented Go
No classes, no inheritance
go has duck typing
structs are used for custom types, aggregation
Interfaces, abstract type has methods
Any custom type having same methods as interface
follows that (and/or other) interface
Interface{}, empty interface is like void in C or
Object in Java
interface
package main!
import (!
"fmt"!
)!
type Printer interface {!
Print()!
}!
func (f MyFloat) Print() {!
!fmt.Println(f);!
}!
func main() {!
var a Printer !
f := MyFloat(5.5)!
a = f!
Features 1/2
Garbage collection
Concurrency
Packages
fmt, net, os, time, math, zlib
http://golang.org/pkg/ has the exhaustive list
Types
bool, int, int8, int16, int32, int64, uint , byte, float32,float64,
complex64, complex128
const
For loop only
struct, access fields using dot
Pointer but no pointer arithmetic
Features 2/2
Slices (array) http://tour.golang.org/#31
Maps http://tour.golang.org/#39
Function closures http://tour.golang.org/#43
Struct methods http://tour.golang.org/#50
Methods cannot be defined on basic types
Interfaces http://tour.golang.org/#53
Error http://tour.golang.org/#55
Concurrency
go routines
Lightweight thread like routine (may be one or more thread)
Channels and Buffered Channel
Useful for sync between go routines
Send and receive to channel is blocking ( no sync needed)
Range and close
Range used iterating over channel
Close used by sender after sending all values
Select
Lets goroutine waits on multiple communication operations
JSON and Go
type Message struct {!
Name string!
Body string!
Time int64!
}!
m := Message{"Alice", "Hello",
1294706395881547000}!
b, err := json.Marshal(m)!
b ==
[]byte(`{"Name":"Alice","Body":"Hello","Time"
:1294706395881547000}`)!
Web Server
Creating a webserver is childs play in Go, (if the child
knows programming J
A sample is available here
Web Server -- http://tour.golang.org/#59
Go In Production
Google is using in production for
http://golang.org
Vitess system for large-scale SQL installations
Download server dl.google.com
It delivers chrome binaries and apt-get packages
Other companies using Go in production
BBC Worldwide
Canonical
Heroku
Replaced web services written ROR to GO
Iron.io
Cloud application services, replaced ROR to GO
Nokia
SoundCloud
http://go-lang.cat-v.org/organizations-using-go
My Opinion About Go
In my opinion Go is very useful for server side
programming and command-line tools. Its
concurrency feature makes it stands out from rest of
the programming languages.
The programs written with Go will be less complex
than C++, making it easier to maintain.
References
FAQ http://golang.org/doc/faq
Installation http://golang.org/doc/install
Code http://golang.org/doc/code.html
Videos
http://blog.golang.org/go-videos-from-googleio-2012
Tour http://tour.golang.org/
Efficiency BM - JSON Benchmarks
References
http://www.javaworld.com/article/2080935/
scripting-jvm-languages/go-google-go-a-languageon-full-throttle.html
http://blog.golang.org/json-and-go
http://www.drdobbs.com/open-source/gettinggoing-with-go
http://www.drdobbs.com/open-source/why-not-go/
240005062
http://www.jellolabs.com/blog/why-golang-isready-for-early-stage-startups.html
References
http://stackoverflow.com/questions/11462046/what-is-
the-niche-of-go-lang
https://code.google.com/p/go-wiki/wiki/
SuccessStories#
http://stackoverflow.com/questions/12168873/crosscompile-go-on-osx
http://matt.aimonetti.net/posts/2012/11/27/real-lifeconcurrency-in-go/
http://www.golang-book.com/10
http://matt-welsh.blogspot.in/2013/08/rewriting-largeproduction-system-in-go.html