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