SlideShare a Scribd company logo
Let’s Go:
Introducing Google's New Programming Language		
Google's announcement of Go programming language during October 2009 has created lots of interest in
programming community. This article introduces Go to system programmers and cover some of the
novel/useful features of the language.
S G Ganesh, sgganesh@gmail.com
This is an article to introduce Go language. Readers will have lots of questions when they come
across a new (and promising) language, but because of limited space, I’ll cover only most important
aspects of Go in this article.
What is Go?
Go is a new, experimental, concurrent, garbage-collected, systems programming language.
new: It is a new language, and was publicly announced during the end of 2009.
experimental: It is still at experimental stage with tools, packages etc. still in development. There is no
production system implemented in Go as I write this article.
concurrent: It is a concurrent language which supports 'communication channels' which is based on
Hoare's Communicating Sequential Processes (CSP).
garbage-collected: The memory is automatically garbage collected, which relieves of the programmer
from manual bookkeeping of memory (as done in C/C++).
for systems-programming: It is intended for writing things like web servers. Still, we can use it as a
general purpose language.
Robert Griesemer, Ken Thompson (of Unix fame), and Rob Pike are the creators of the language.
All of Go’s toolset (compilers, packages, runtime libraries, tools etc) are made open source under
BSD license.
Goals and motivation
Let us first see what motivated Go’s creators for coming up with this new language. In last decade,
much has changed in computing world: Libraries have become bigger with
lots of dependencies which makes enterprise software development unbearably slow; internet and
networking has becoming pervasive; multi-core processors becoming mainstream and so on.
Systems programming languages (like C) were not designed with these in mind.
Concurrency features. The creators of the language found that there is a genuine need for a systems
programming language that is suitable for this new world. Go is suitable for use in multi-core and
networked world: Go is a concurrent language. It has ‘communication channels’ feature which is
much safer and different from threads and lock-based concurrency (like Java or Pthreads).
High-speed builds. It is faster to build applications with Go: The language is designed for fast
compilation in mind. Examples: the compiler does not need a symbol-table(!); the parser does not
need any look-ahead of tokens(!). Package dependencies are made explicit; dependent packages
require recompilation only if really needed: features like this enables quick builds. This approach is
unlike other languages like C, C++, Java etc.
Safe to use. Low-level languages like C are bug prone, particularly with manual memory management
and pointer manipulation. Go is garbage collected and is memory safe. It is a strictly typed language
and disallows unsafe programming (pointer manipulation is not allowed, for example), so it is also
type-safe.
Efficiency. Performance of Go code is within 10%-20% of the equivalent C code. Given the fact that
it supports features like reflection and garbage collection, the ability to execute write such efficient
programs is interesting (and impressive).
Ease of use. Go brings the ease of programming of a dynamically typed language, like Ruby and
Python. This is a surprising feature given the fact that it is a type-safe, statically typed language. The
code is also less verbose, with its features like type-inference (unlike Java, for example).
‘Hello world’ Example
It is a tradition to introduce a language by giving a ‘Hello world’ example, so here it is:
package main
func main() {
print("Hello world")
}
It prints ‘Hello world’ if you run it, as you would expect. Now, let us discuss about the program.
All the programs in Go should be in a package. In Go, the execution starts with ‘main.main()’
function. In other words, our ‘main’ function should be provided in ‘main’ package; that is what the
first statement does.
All functions are defined using ‘func’ keyword. The ‘main’ function takes no arguments and returns
nothing. We will not cover how to process command-line arguments in this article.
Go has a set of ‘built-in functions’ and ‘print’ is one of them. Alternatively, we could have used C-
like ‘Printf’ function from ‘fmt’ package (which provides formatted input/output functions).
Note that there are no semicolons in this program. This is a nice feature of Go: In most of the cases,
semicolons is optional. However, in few cases, we have to explicitly use semi-colons, and we’ll not
cover that issue in this article.
Novel features of Go
When I started learning Go, I found that it has many novel features. One of the best features is its
interface feature (not to be confused with ‘interface’ keyword in Java/C#). Any structure that
implements a set of methods given by an interface is considered to implement that interface! I saw
sample code in the Go source packages and was impressed by the simplicity and beauty of the
feature. Note that many dynamic languages support ‘duck typing’ which is more sophisticated and
flexible. However, Go achieves limited form of ‘duck typing’ with type-safety and flexibility, in a
statically typed language and that too meant for systems programming!
Go has an elegant declaration syntax different from most C-based languages. Go supports
‘goroutines’ (not same as ‘threads’ or ‘coroutines’ as in other languages), which is a powerful feature
for writing concurrent programs. We can use reflection in Go (remember it is a systems programming
language!). The support for packages and the way methods are imported/exported is simple and
straight-forward (no keywords like ‘public’, ‘export’ etc are needed, for example). There are more,
but I’ll leave it to you to discover them yourselves.
Installing Go
Currently, Go implementations are available for two platforms: Linux and Mac OS X. There are two
implementations for these platforms: One is a stand-alone implementation of Go compiler and
runtime, written by Ken Thompson. Another is a GCC front-end, implemented by Ian Lance
Taylor.
You can download and install Go by following the instructions given in Go’s official website:
http://golang.org/doc/install.html.
What about Windows? There is no official port of Go available for Windows and we can use
“unofficial ports” as of now (check unofficial Go site: http://go-lang.cat-v.org/os-ports).
I tried installing both Windows and Linux versions, and the installation was easy and smooth.
Wrapping up
With my experience in trying Go for last few months and writing non-trivial programs, I think there
is lots of substance behind hype: Go is certainly a language that has some unique features that will
make it as a useful systems programming language in this age of internet and multi-core processors.
So, it is not a surprised when I came to know that Go won Tiobe’s ‘language of the year award 2009’
(it won the award just after few months of its announcement!).
The best feature like liked in Go is its simplicity (yes, I am considering it a feature)! In just a couple of
days I have started learning Go, I was able to write non-trivial programs and started liking it. It was
fun learning and playing with the language. I would recommend Go to any systems programmer and
encourage trying it out.

More Related Content

PPT
Introduction to Go-Lang
PDF
The Ring programming language version 1.5.1 book - Part 4 of 180
PPT
A First Look at Google's Go Programming Language
PDF
Go language presentation
PPTX
PDF
The Ring programming language version 1.5.3 book - Part 5 of 184
PPTX
Introduction to go lang
PDF
What is the best programming language for beginner?
Introduction to Go-Lang
The Ring programming language version 1.5.1 book - Part 4 of 180
A First Look at Google's Go Programming Language
Go language presentation
The Ring programming language version 1.5.3 book - Part 5 of 184
Introduction to go lang
What is the best programming language for beginner?

What's hot (18)

PDF
Why you should care about Go (Golang)
PDF
Computer programming tools and building process
PDF
Windows script host
PDF
The Ring programming language version 1.5.4 book - Part 5 of 185
PPTX
Ndu06 typesof language
PPTX
Scaling applications with go
PDF
Windows batch scripting
PDF
Web programming UNIT II by Bhavsingh Maloth
PDF
Building Command Line Tools with Golang
PDF
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
PDF
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
PPTX
Programming languages
PPTX
Go Language presentation
PDF
The Ring programming language version 1.10 book - Part 99 of 212
PPTX
Evolution or stagnation programming languages
PPTX
Theory of programming
PDF
[INNOVATUBE] Tech Talk #3: Golang - Vũ Nguyễn
PDF
An introduction to go programming language
Why you should care about Go (Golang)
Computer programming tools and building process
Windows script host
The Ring programming language version 1.5.4 book - Part 5 of 185
Ndu06 typesof language
Scaling applications with go
Windows batch scripting
Web programming UNIT II by Bhavsingh Maloth
Building Command Line Tools with Golang
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Daniele Esposti - Evolution or stagnation programming languages - Codemotion ...
Programming languages
Go Language presentation
The Ring programming language version 1.10 book - Part 99 of 212
Evolution or stagnation programming languages
Theory of programming
[INNOVATUBE] Tech Talk #3: Golang - Vũ Nguyễn
An introduction to go programming language
Ad

Similar to Lets Go - An introduction to Google's Go Programming Language (20)

PPT
Google's Go Programming Language - Introduction
PPTX
Golang - Overview of Go (golang) Language
PDF
Introduction to Go
PDF
Introduction to Programming in Go
PDF
Introduction to go, and why it's awesome
PDF
An Introduction to Go
PPTX
Golang (Go Programming Language)
PPT
Introduction to Go ProgrammingLanguage.ppt
PPTX
Go programming language
PDF
PDF
Go Within Cloud Foundry
PDF
Golang : A Hype or the Future?
PPTX
go language- haseeb.pptx
PDF
The Awesomeness of Go
PPTX
Go fundamentals
PPTX
Ready, set, go! An introduction to the Go programming language
PPTX
Lab1GoBasicswithgo_foundationofgolang.pptx
PDF
The GO programming language
PPT
Introduction to Go programming
PDF
GoLang Introduction
Google's Go Programming Language - Introduction
Golang - Overview of Go (golang) Language
Introduction to Go
Introduction to Programming in Go
Introduction to go, and why it's awesome
An Introduction to Go
Golang (Go Programming Language)
Introduction to Go ProgrammingLanguage.ppt
Go programming language
Go Within Cloud Foundry
Golang : A Hype or the Future?
go language- haseeb.pptx
The Awesomeness of Go
Go fundamentals
Ready, set, go! An introduction to the Go programming language
Lab1GoBasicswithgo_foundationofgolang.pptx
The GO programming language
Introduction to Go programming
GoLang Introduction
Ad

More from Ganesh Samarthyam (20)

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

Recently uploaded (20)

PDF
Best Practices for Rolling Out Competency Management Software.pdf
PPTX
Transform Your Business with a Software ERP System
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Build Multi-agent using Agent Development Kit
PDF
Become an Agentblazer Champion Challenge Kickoff
PDF
top salesforce developer skills in 2025.pdf
PPTX
What to Capture When It Breaks: 16 Artifacts That Reveal Root Causes
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Digital Strategies for Manufacturing Companies
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
Presentation of Computer CLASS 2 .pptx
PDF
medical staffing services at VALiNTRY
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
ai tools demonstartion for schools and inter college
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
Materi_Pemrograman_Komputer-Looping.pptx
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
AIRLINE PRICE API | FLIGHT API COST |
PPTX
Online Work Permit System for Fast Permit Processing
PPT
Introduction Database Management System for Course Database
Best Practices for Rolling Out Competency Management Software.pdf
Transform Your Business with a Software ERP System
VVF-Customer-Presentation2025-Ver1.9.pptx
Build Multi-agent using Agent Development Kit
Become an Agentblazer Champion Challenge Kickoff
top salesforce developer skills in 2025.pdf
What to Capture When It Breaks: 16 Artifacts That Reveal Root Causes
2025 Textile ERP Trends: SAP, Odoo & Oracle
Digital Strategies for Manufacturing Companies
Understanding Forklifts - TECH EHS Solution
Presentation of Computer CLASS 2 .pptx
medical staffing services at VALiNTRY
How Creative Agencies Leverage Project Management Software.pdf
ai tools demonstartion for schools and inter college
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Materi_Pemrograman_Komputer-Looping.pptx
Upgrade and Innovation Strategies for SAP ERP Customers
AIRLINE PRICE API | FLIGHT API COST |
Online Work Permit System for Fast Permit Processing
Introduction Database Management System for Course Database

Lets Go - An introduction to Google's Go Programming Language

  • 1. Let’s Go: Introducing Google's New Programming Language Google's announcement of Go programming language during October 2009 has created lots of interest in programming community. This article introduces Go to system programmers and cover some of the novel/useful features of the language. S G Ganesh, [email protected] This is an article to introduce Go language. Readers will have lots of questions when they come across a new (and promising) language, but because of limited space, I’ll cover only most important aspects of Go in this article. What is Go? Go is a new, experimental, concurrent, garbage-collected, systems programming language. new: It is a new language, and was publicly announced during the end of 2009. experimental: It is still at experimental stage with tools, packages etc. still in development. There is no production system implemented in Go as I write this article. concurrent: It is a concurrent language which supports 'communication channels' which is based on Hoare's Communicating Sequential Processes (CSP). garbage-collected: The memory is automatically garbage collected, which relieves of the programmer from manual bookkeeping of memory (as done in C/C++). for systems-programming: It is intended for writing things like web servers. Still, we can use it as a general purpose language. Robert Griesemer, Ken Thompson (of Unix fame), and Rob Pike are the creators of the language. All of Go’s toolset (compilers, packages, runtime libraries, tools etc) are made open source under BSD license. Goals and motivation Let us first see what motivated Go’s creators for coming up with this new language. In last decade, much has changed in computing world: Libraries have become bigger with lots of dependencies which makes enterprise software development unbearably slow; internet and networking has becoming pervasive; multi-core processors becoming mainstream and so on. Systems programming languages (like C) were not designed with these in mind. Concurrency features. The creators of the language found that there is a genuine need for a systems programming language that is suitable for this new world. Go is suitable for use in multi-core and networked world: Go is a concurrent language. It has ‘communication channels’ feature which is much safer and different from threads and lock-based concurrency (like Java or Pthreads). High-speed builds. It is faster to build applications with Go: The language is designed for fast compilation in mind. Examples: the compiler does not need a symbol-table(!); the parser does not
  • 2. need any look-ahead of tokens(!). Package dependencies are made explicit; dependent packages require recompilation only if really needed: features like this enables quick builds. This approach is unlike other languages like C, C++, Java etc. Safe to use. Low-level languages like C are bug prone, particularly with manual memory management and pointer manipulation. Go is garbage collected and is memory safe. It is a strictly typed language and disallows unsafe programming (pointer manipulation is not allowed, for example), so it is also type-safe. Efficiency. Performance of Go code is within 10%-20% of the equivalent C code. Given the fact that it supports features like reflection and garbage collection, the ability to execute write such efficient programs is interesting (and impressive). Ease of use. Go brings the ease of programming of a dynamically typed language, like Ruby and Python. This is a surprising feature given the fact that it is a type-safe, statically typed language. The code is also less verbose, with its features like type-inference (unlike Java, for example). ‘Hello world’ Example It is a tradition to introduce a language by giving a ‘Hello world’ example, so here it is: package main func main() { print("Hello world") } It prints ‘Hello world’ if you run it, as you would expect. Now, let us discuss about the program. All the programs in Go should be in a package. In Go, the execution starts with ‘main.main()’ function. In other words, our ‘main’ function should be provided in ‘main’ package; that is what the first statement does. All functions are defined using ‘func’ keyword. The ‘main’ function takes no arguments and returns nothing. We will not cover how to process command-line arguments in this article. Go has a set of ‘built-in functions’ and ‘print’ is one of them. Alternatively, we could have used C- like ‘Printf’ function from ‘fmt’ package (which provides formatted input/output functions). Note that there are no semicolons in this program. This is a nice feature of Go: In most of the cases, semicolons is optional. However, in few cases, we have to explicitly use semi-colons, and we’ll not cover that issue in this article. Novel features of Go When I started learning Go, I found that it has many novel features. One of the best features is its interface feature (not to be confused with ‘interface’ keyword in Java/C#). Any structure that implements a set of methods given by an interface is considered to implement that interface! I saw
  • 3. sample code in the Go source packages and was impressed by the simplicity and beauty of the feature. Note that many dynamic languages support ‘duck typing’ which is more sophisticated and flexible. However, Go achieves limited form of ‘duck typing’ with type-safety and flexibility, in a statically typed language and that too meant for systems programming! Go has an elegant declaration syntax different from most C-based languages. Go supports ‘goroutines’ (not same as ‘threads’ or ‘coroutines’ as in other languages), which is a powerful feature for writing concurrent programs. We can use reflection in Go (remember it is a systems programming language!). The support for packages and the way methods are imported/exported is simple and straight-forward (no keywords like ‘public’, ‘export’ etc are needed, for example). There are more, but I’ll leave it to you to discover them yourselves. Installing Go Currently, Go implementations are available for two platforms: Linux and Mac OS X. There are two implementations for these platforms: One is a stand-alone implementation of Go compiler and runtime, written by Ken Thompson. Another is a GCC front-end, implemented by Ian Lance Taylor. You can download and install Go by following the instructions given in Go’s official website: http://golang.org/doc/install.html. What about Windows? There is no official port of Go available for Windows and we can use “unofficial ports” as of now (check unofficial Go site: http://go-lang.cat-v.org/os-ports). I tried installing both Windows and Linux versions, and the installation was easy and smooth. Wrapping up With my experience in trying Go for last few months and writing non-trivial programs, I think there is lots of substance behind hype: Go is certainly a language that has some unique features that will make it as a useful systems programming language in this age of internet and multi-core processors. So, it is not a surprised when I came to know that Go won Tiobe’s ‘language of the year award 2009’ (it won the award just after few months of its announcement!). The best feature like liked in Go is its simplicity (yes, I am considering it a feature)! In just a couple of days I have started learning Go, I was able to write non-trivial programs and started liking it. It was fun learning and playing with the language. I would recommend Go to any systems programmer and encourage trying it out.