The GO Programming Language

Chris Lupo Prestented to: CPLUG Cal Poly, San Luis Obispo February 9, 2010

Outline 

Introduction



GO Basics



Tools



Project Ideas

Introduction Go is: 

New 

 

Started by Robert Griesemer, Ken Thompson, and Rob Pike (Googlers) in late 2007. Released in October of 2009. Still very young.

Introduction Go is: 

Concurrent 





Go promotes writing systems and servers as sets of lightweight communicating processes, called goroutines. Run thousands of goroutines if you want— and say good-bye to stack overflows. Language takes care of goroutine management, memory management. Growing stacks, multiplexing of goroutines onto threads is done automatically.

Introduction Go is: 

Garbage-collected 





Concurrency is hard without garbagecollection Garbage-collection is hard without the right language GO's implementation is efficient and latency-free

Introduction Go is: 

A systems programming language  



First in over a decade In that decade, we've had:  sprawling libraries & dependency chains  dominance of networking  client/server focus  massive clusters  the rise of multi-core CPUs C/C++ were not designed with these in mind

Introduction Go is: 

Fast     

It takes too long to build software. The tools are slow and are getting slower. Dependencies are uncontrolled. Machines have stopped getting faster. Yet software still grows and grows.

Introduction Go is: 

Fun?! Easy?! The language is simple, so it's easier to be productive in  Few keywords, parsable without symbol table.  No stuttering; don't want to see foo.Foo *myFoo = new foo.Foo(foo.FOO_INIT) 





Keep the type system clear. No type hierarchy. Too clumsy to write code by constructing type hierarchies. It can still be object-oriented.

Hello, world

package main import "fmt" func main() {   fmt.Printf("Hello, world\n") }

Go Fast! As xkcd observes:

http://xkcd.com/303/

GO Basics 

Comments 

Both C-style /* */ and C++-style // comments supported 

// are the norm, except for block comments in packages and for disabling large chunks of code

GO Basics 

Formatting 

Indentation Use tabs for indentation. gofmt will handle alignment for you. Parentheses 





Go needs fewer parentheses: control structures (if, for, switch) don't require parentheses. Also, the operator precedence hierarchy is shorter and clearer, so x