Go Programming Language by Google

Post on 28-Jan-2015

118 views 6 download

Tags:

description

It's a natively compiled programming language by Google.

transcript

U T T A M G A N D H I

C O N N E C T W I T H U T T A M O N L I N K E D I N

Why to go for Go

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 child’s 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. It’s 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-google-io-2012

�  Tour http://tour.golang.org/ �  Efficiency BM - JSON Benchmarks

References

�  http://www.javaworld.com/article/2080935/scripting-jvm-languages/go-google-go-a-language-on-full-throttle.html

�  http://blog.golang.org/json-and-go �  http://www.drdobbs.com/open-source/getting-

going-with-go �  http://www.drdobbs.com/open-source/why-not-go/

240005062 �  http://www.jellolabs.com/blog/why-golang-is-

ready-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/cross-compile-go-on-osx

�  http://matt.aimonetti.net/posts/2012/11/27/real-life-concurrency-in-go/

�  http://www.golang-book.com/10 �  http://matt-welsh.blogspot.in/2013/08/rewriting-large-

production-system-in-go.html