0% found this document useful (0 votes)
194 views21 pages

Golang 140118232950

The document discusses the Go programming language, including its history, key features, and why it is a good choice for programming. Some of its main advantages are that it combines high performance from compiled languages with ease of use from interpreted languages. It is also strongly typed, garbage collected, and supports concurrency out of the box. Examples are given of Hello World programs and basic functions in Go.

Uploaded by

maile4scribd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
194 views21 pages

Golang 140118232950

The document discusses the Go programming language, including its history, key features, and why it is a good choice for programming. Some of its main advantages are that it combines high performance from compiled languages with ease of use from interpreted languages. It is also strongly typed, garbage collected, and supports concurrency out of the box. Examples are given of Hello World programs and basic functions in Go.

Uploaded by

maile4scribd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

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

You might also like