SlideShare una empresa de Scribd logo
1 de 23
Google’s Go
Introduction to the next “C” language!
S G Ganesh
Agenda
 Introduction to Go (What is “Go”?)
 “Hello world” in Go
 Examples for “getting a hang of” Go
 Examples using some novel features
 Implementation status
 Resources
 Let’s Go!
First things first: Setting the stage
 It’s not possible to cover all details of a new language in a
45-mins presentation
 We’ll quickly cover most important aspects of Go
 Can’t drink ocean in a day – let alone in an hour!
 No one is an “expert” in Go yet
 Creators of the language are the only experts right now
 I am an early adopter and got hooked-on to the
language
 I am making this presentation based on my experience
 For many questions, there are no right or wrong answers:
 Go is still an evolving language and answers might
change!
So, what’s all the buzz about?
 Go: new programming language announced by Google (Sep 09)
 Created lots of excitement in the programming community
 Many tout it as the next C language
 ‘C’ evolved from ‘B’; many languages are named as ‘D’, or
want to be the ‘D’ language
 But nothing has made the cut so far; “Go” might (or will it be
“Gone” in a few years ;-) )
 Is there substance behind hype?
 Yes, a lot! Most system programmers find it very good
 Go won Tiobe’s ‘language of the year award 2009’
 Tiobe is a programming language popularity index:
http://www.tiobe.com/
 Latest status (march 2010)
Okay, so what’s Go?
 Go is a new, experimental, concurrent, garbage-collected,
systems-programming language.
 New & Experimental: Go is still at experimental stage
 with tools, packages etc. still in development.
 No production system implemented using Go till now
 Concurrent: Supports 'communication channels’ for
concurrency - Communicating Sequential Processes (CSP).
 Garbage-collected: The memory is automatically garbage
collected
 For systems-programming: Intended for writing things like
compilers, web servers…

Still, we can use it as a general purpose language.
Who’s behind Go?
 Robert Griesemer, Ken Thompson (of Unix
fame), and Rob Pike are the creators of the
language.
 All three are well-known in programming community
 This is how things fell in place:
 Go project was started around May 2007. Ken Thompson
wrote a Go compiler and runtime from scratch.
 By mid of 2008, working compiler and runtime was ready.
 Ian Lance Taylor and Russ Cox joined Go team in 2008. Ian
Taylor implemented GCC front-end for Go.
Why a new language?
 This description is as given by the creators
 No major sys. programming language came-up in last
decade. But much has changed during the last decade(s)
 Libraries becoming bigger with lots of dependencies
 Internet and networking is becoming pervasive
 Client/server systems, massive clusters used today
 Multi-core processors becoming mainstream.
 Systems programming languages were not designed with
these in mind.
 Other reasons
 construction (enterprise software) has become very slow
 OOP using inheritance hierarchies not effective
Goals of the language
 Efficiency and ease of use:
 Efficiency of C, but ease like Ruby.
 Performance: within 10%-20% of equivalent C
 Safe to use:
 Both type-safe as well as memory-safe.
 Concurrency:
 Good support for concurrency and communication
 Garbage Collected:
 "Attempts" to build an efficient, and latency-free Garbage
Collection mechanism.
 High-speed builds:
 Fast compilation & linking
Some important capabilities of Go
 Simplicity: GO has a clean and concise syntax
 Characteristic of Google products
 For example, light-weight type system
 Use it to believe it
 Separation of interface and the implementation
 I know it’s often misused statement, but Go has it!
 Arguably a novel feature of Go
 Goroutines
 Is based on CSP: much safer than lock-based, like Java
 And more:
 E.g. Reflection (yes! but this is systems prog. lang!)
Enough theory, lets see examples!
 All programs in Go should be in a package, its “main”
here
 We import “fmt” package for using Printf function
 Execution starts with ‘main.main()’ function
 Functions have “func” keyword
 Printf is in fmt package
Now we’ll find factorial of a number
 Lack of declarations
 “fact” and “i” inferred as “ints” from init value 1 because of :=
 “for” loop is the only loop construct supported in Go
 Others like “while” are variations of “for”
 An example of minimal features
 Note the lack of semi-colons
 Have to use only if “necessary”
Looks like C, but not C!
 Go has elegant declaration syntax
 See how arguments are passed and returned
 Not like C: it is infamous for its declaration syntax
 Can return multiple values from functions
 See swap for similar functionality in = operator
 Example for “orthogonal” language features
Built-in support for features like maps
 Maps are built-in, so no need to import
 Initialized with pair separated by “:”
 “range” keyword is useful for traversal
 Using a for loop
 Works for slices, strings etc. (“orthogonal” feature)
Functions as first class objects
 Functions are first
class objects in Go
 We can have
“function literals”
(similar to
“closures” in
functional
languages) for
example
Structures
 Structs are declared with type keyword
 We can have struct literals
 Created in heap
 And print struct members using %v in Printf
Methods
 Methods are implemented by specifying the struct
name before the method name
Interfaces: A novel feature
 Interfaces specified with
‘interface’ keyword
 Not same as in C#/Java
 The structs doesn’t have to
say it implements an
interface
 Any struct that implements
the methods as specified
by any interface satisfies
that interface
 Strict static type checking &
“duck typing”!
Goroutines: easy & safe multithreading
 Goroutines are functions executing in parallel
 in the same address space in stack
 They communicate using “channels” (based on CSP)
 Cleaner, simpler and less-bug prone than using locks
 This shows an example* of how a Sort on big list can be done in
parallel with some other computation
We haven’t covered a lot!
 Important features not covered because of limited time
 reflection, embedding structs (aka inheritance), package
construction etc.
 Lots of libraries already implemented
 math, crypto, networking, regex, OS, testing, html gen….
 Garbage collection & Go runtime capabilities
 Currently mark-and-sweep collector, but better ones under
construction
 Small runtime: GC, channels, stack allocation, goroutines
etc.
Implementation status
 Currently compiler tool-chain available for Mac & Linux
 No “official” windows port; “unofficial” old ports exist
 Compilers: GCC implementation and a stand-alone implementation
 You can download the compilers/tools from this website & try it
 It’s open source (BSD license): We can contribute!
 Lots of work going on in libraries and improving the existing
tool chain
 Frequent builds & releases, quick response times etc.
 Many features & tools still lacking in Go
 For example, generics and debugger tool
Resources
 Go websites:
 Official: www.golang.org (web server implemented in Go!)
 Unofficial: http://go-lang.cat-v.org/
 Want to learn Go?
 No “books” yet
 Read "Effective Go” (http://golang.org/doc/effective_go.html)
 tutorials available online
 Tech talk (http://www.youtube.com/watch?v=rKnDgT73v8s)
 Join go-nuts mailing list gonuts@googlegroups.com
 You can try (compile & run) Go programs online!
 This is really useful: http://ideone.com/
Q & A time
So what are you waiting for?
 Lets Go!

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Golang (Go Programming Language)
Golang (Go Programming Language)Golang (Go Programming Language)
Golang (Go Programming Language)
 
Go lang
Go langGo lang
Go lang
 
Golang
GolangGolang
Golang
 
Go Programming language, golang
Go Programming language, golangGo Programming language, golang
Go Programming language, golang
 
Golang - Overview of Go (golang) Language
Golang - Overview of Go (golang) LanguageGolang - Overview of Go (golang) Language
Golang - Overview of Go (golang) Language
 
Golang from Scala developer’s perspective
Golang from Scala developer’s perspectiveGolang from Scala developer’s perspective
Golang from Scala developer’s perspective
 
Introduction to go lang
Introduction to go langIntroduction to go lang
Introduction to go lang
 
Go Language presentation
Go Language presentationGo Language presentation
Go Language presentation
 
Go Lang
Go LangGo Lang
Go Lang
 
Wonders of Golang
Wonders of GolangWonders of Golang
Wonders of Golang
 
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
Mphasis Digital - Use Go (gloang) for system programming, distributed systems...
 
Ready, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming languageReady, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming language
 
Coding with golang
Coding with golangCoding with golang
Coding with golang
 
Golang
GolangGolang
Golang
 
GoLang Introduction
GoLang IntroductionGoLang Introduction
GoLang Introduction
 
Golang
GolangGolang
Golang
 
Lets Go - An introduction to Google's Go Programming Language
Lets Go - An introduction to Google's Go Programming Language Lets Go - An introduction to Google's Go Programming Language
Lets Go - An introduction to Google's Go Programming Language
 
Golang #5: To Go or not to Go
Golang #5: To Go or not to GoGolang #5: To Go or not to Go
Golang #5: To Go or not to Go
 
Building Command Line Tools with Golang
Building Command Line Tools with GolangBuilding Command Line Tools with Golang
Building Command Line Tools with Golang
 

Similar a A First Look at Google's Go Programming Language

Go Within Cloud Foundry
Go Within Cloud FoundryGo Within Cloud Foundry
Go Within Cloud Foundry
Platform CF
 

Similar a A First Look at Google's Go Programming Language (20)

Let's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageLet's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming Language
 
Beginning development in go
Beginning development in goBeginning development in go
Beginning development in go
 
Introduction to Go
Introduction to GoIntroduction to Go
Introduction to Go
 
Scaling applications with go
Scaling applications with goScaling applications with go
Scaling applications with go
 
C c#
C c#C c#
C c#
 
difference between c c++ c#
difference between c c++ c#difference between c c++ c#
difference between c c++ c#
 
The Ring programming language version 1.10 book - Part 99 of 212
The Ring programming language version 1.10 book - Part 99 of 212The Ring programming language version 1.10 book - Part 99 of 212
The Ring programming language version 1.10 book - Part 99 of 212
 
Go programing language
Go programing languageGo programing language
Go programing language
 
The Ring programming language version 1.2 book - Part 4 of 84
The Ring programming language version 1.2 book - Part 4 of 84The Ring programming language version 1.2 book - Part 4 of 84
The Ring programming language version 1.2 book - Part 4 of 84
 
An Introduction to Go
An Introduction to GoAn Introduction to Go
An Introduction to Go
 
The Ring programming language version 1.5.1 book - Part 4 of 180
The Ring programming language version 1.5.1 book - Part 4 of 180The Ring programming language version 1.5.1 book - Part 4 of 180
The Ring programming language version 1.5.1 book - Part 4 of 180
 
Go Within Cloud Foundry
Go Within Cloud FoundryGo Within Cloud Foundry
Go Within Cloud Foundry
 
Google GO
Google GOGoogle GO
Google GO
 
The Ring programming language version 1.6 book - Part 6 of 189
The Ring programming language version 1.6 book - Part 6 of 189The Ring programming language version 1.6 book - Part 6 of 189
The Ring programming language version 1.6 book - Part 6 of 189
 
Golang : A Hype or the Future?
Golang : A Hype or the Future?Golang : A Hype or the Future?
Golang : A Hype or the Future?
 
Advantages of golang development services & 10 most used go frameworks
Advantages of golang development services & 10 most used go frameworksAdvantages of golang development services & 10 most used go frameworks
Advantages of golang development services & 10 most used go frameworks
 
Golang
GolangGolang
Golang
 
Beyond the Hype: 4 Years of Go in Production
Beyond the Hype: 4 Years of Go in ProductionBeyond the Hype: 4 Years of Go in Production
Beyond the Hype: 4 Years of Go in Production
 
The Ring programming language version 1.3 book - Part 81 of 88
The Ring programming language version 1.3 book - Part 81 of 88The Ring programming language version 1.3 book - Part 81 of 88
The Ring programming language version 1.3 book - Part 81 of 88
 
Golang, Future of Programming Language.
Golang, Future of Programming Language.Golang, Future of Programming Language.
Golang, Future of Programming Language.
 

Más de Ganesh Samarthyam

Más de Ganesh Samarthyam (20)

Wonders of the Sea
Wonders of the SeaWonders of the Sea
Wonders of the Sea
 
Animals - for kids
Animals - for kids Animals - for kids
Animals - for kids
 
Applying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeApplying Refactoring Tools in Practice
Applying Refactoring Tools in Practice
 
CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”
 
Great Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGreat Coding Skills Aren't Enough
Great Coding Skills Aren't Enough
 
College Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionCollege Project - Java Disassembler - Description
College Project - Java Disassembler - Description
 
Coding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeCoding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean Code
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
 
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationBangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief Presentation
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - Poster
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++
 
Bangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckBangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship Deck
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
Docker by Example - Quiz
Docker by Example - QuizDocker by Example - Quiz
Docker by Example - Quiz
 
Core Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizCore Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quiz
 
Advanced Debugging Using Java Bytecodes
Advanced Debugging Using Java BytecodesAdvanced Debugging Using Java Bytecodes
Advanced Debugging Using Java Bytecodes
 

Último

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Último (20)

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 

A First Look at Google's Go Programming Language

  • 1. Google’s Go Introduction to the next “C” language! S G Ganesh
  • 2. Agenda  Introduction to Go (What is “Go”?)  “Hello world” in Go  Examples for “getting a hang of” Go  Examples using some novel features  Implementation status  Resources  Let’s Go!
  • 3. First things first: Setting the stage  It’s not possible to cover all details of a new language in a 45-mins presentation  We’ll quickly cover most important aspects of Go  Can’t drink ocean in a day – let alone in an hour!  No one is an “expert” in Go yet  Creators of the language are the only experts right now  I am an early adopter and got hooked-on to the language  I am making this presentation based on my experience  For many questions, there are no right or wrong answers:  Go is still an evolving language and answers might change!
  • 4. So, what’s all the buzz about?  Go: new programming language announced by Google (Sep 09)  Created lots of excitement in the programming community  Many tout it as the next C language  ‘C’ evolved from ‘B’; many languages are named as ‘D’, or want to be the ‘D’ language  But nothing has made the cut so far; “Go” might (or will it be “Gone” in a few years ;-) )  Is there substance behind hype?  Yes, a lot! Most system programmers find it very good  Go won Tiobe’s ‘language of the year award 2009’  Tiobe is a programming language popularity index: http://www.tiobe.com/  Latest status (march 2010)
  • 5. Okay, so what’s Go?  Go is a new, experimental, concurrent, garbage-collected, systems-programming language.  New & Experimental: Go is still at experimental stage  with tools, packages etc. still in development.  No production system implemented using Go till now  Concurrent: Supports 'communication channels’ for concurrency - Communicating Sequential Processes (CSP).  Garbage-collected: The memory is automatically garbage collected  For systems-programming: Intended for writing things like compilers, web servers…  Still, we can use it as a general purpose language.
  • 6. Who’s behind Go?  Robert Griesemer, Ken Thompson (of Unix fame), and Rob Pike are the creators of the language.  All three are well-known in programming community  This is how things fell in place:  Go project was started around May 2007. Ken Thompson wrote a Go compiler and runtime from scratch.  By mid of 2008, working compiler and runtime was ready.  Ian Lance Taylor and Russ Cox joined Go team in 2008. Ian Taylor implemented GCC front-end for Go.
  • 7. Why a new language?  This description is as given by the creators  No major sys. programming language came-up in last decade. But much has changed during the last decade(s)  Libraries becoming bigger with lots of dependencies  Internet and networking is becoming pervasive  Client/server systems, massive clusters used today  Multi-core processors becoming mainstream.  Systems programming languages were not designed with these in mind.  Other reasons  construction (enterprise software) has become very slow  OOP using inheritance hierarchies not effective
  • 8. Goals of the language  Efficiency and ease of use:  Efficiency of C, but ease like Ruby.  Performance: within 10%-20% of equivalent C  Safe to use:  Both type-safe as well as memory-safe.  Concurrency:  Good support for concurrency and communication  Garbage Collected:  "Attempts" to build an efficient, and latency-free Garbage Collection mechanism.  High-speed builds:  Fast compilation & linking
  • 9. Some important capabilities of Go  Simplicity: GO has a clean and concise syntax  Characteristic of Google products  For example, light-weight type system  Use it to believe it  Separation of interface and the implementation  I know it’s often misused statement, but Go has it!  Arguably a novel feature of Go  Goroutines  Is based on CSP: much safer than lock-based, like Java  And more:  E.g. Reflection (yes! but this is systems prog. lang!)
  • 10. Enough theory, lets see examples!  All programs in Go should be in a package, its “main” here  We import “fmt” package for using Printf function  Execution starts with ‘main.main()’ function  Functions have “func” keyword  Printf is in fmt package
  • 11. Now we’ll find factorial of a number  Lack of declarations  “fact” and “i” inferred as “ints” from init value 1 because of :=  “for” loop is the only loop construct supported in Go  Others like “while” are variations of “for”  An example of minimal features  Note the lack of semi-colons  Have to use only if “necessary”
  • 12. Looks like C, but not C!  Go has elegant declaration syntax  See how arguments are passed and returned  Not like C: it is infamous for its declaration syntax  Can return multiple values from functions  See swap for similar functionality in = operator  Example for “orthogonal” language features
  • 13. Built-in support for features like maps  Maps are built-in, so no need to import  Initialized with pair separated by “:”  “range” keyword is useful for traversal  Using a for loop  Works for slices, strings etc. (“orthogonal” feature)
  • 14. Functions as first class objects  Functions are first class objects in Go  We can have “function literals” (similar to “closures” in functional languages) for example
  • 15. Structures  Structs are declared with type keyword  We can have struct literals  Created in heap  And print struct members using %v in Printf
  • 16. Methods  Methods are implemented by specifying the struct name before the method name
  • 17. Interfaces: A novel feature  Interfaces specified with ‘interface’ keyword  Not same as in C#/Java  The structs doesn’t have to say it implements an interface  Any struct that implements the methods as specified by any interface satisfies that interface  Strict static type checking & “duck typing”!
  • 18. Goroutines: easy & safe multithreading  Goroutines are functions executing in parallel  in the same address space in stack  They communicate using “channels” (based on CSP)  Cleaner, simpler and less-bug prone than using locks  This shows an example* of how a Sort on big list can be done in parallel with some other computation
  • 19. We haven’t covered a lot!  Important features not covered because of limited time  reflection, embedding structs (aka inheritance), package construction etc.  Lots of libraries already implemented  math, crypto, networking, regex, OS, testing, html gen….  Garbage collection & Go runtime capabilities  Currently mark-and-sweep collector, but better ones under construction  Small runtime: GC, channels, stack allocation, goroutines etc.
  • 20. Implementation status  Currently compiler tool-chain available for Mac & Linux  No “official” windows port; “unofficial” old ports exist  Compilers: GCC implementation and a stand-alone implementation  You can download the compilers/tools from this website & try it  It’s open source (BSD license): We can contribute!  Lots of work going on in libraries and improving the existing tool chain  Frequent builds & releases, quick response times etc.  Many features & tools still lacking in Go  For example, generics and debugger tool
  • 21. Resources  Go websites:  Official: www.golang.org (web server implemented in Go!)  Unofficial: http://go-lang.cat-v.org/  Want to learn Go?  No “books” yet  Read "Effective Go” (http://golang.org/doc/effective_go.html)  tutorials available online  Tech talk (http://www.youtube.com/watch?v=rKnDgT73v8s)  Join go-nuts mailing list gonuts@googlegroups.com  You can try (compile & run) Go programs online!  This is really useful: http://ideone.com/
  • 22. Q & A time
  • 23. So what are you waiting for?  Lets Go!