OpenWest 2014/Go
Ken Thompson - Unix
Gopher - GopherCon 2014
Utah Go Users Group - http://www.utahgophers.com
- Tues. May 13 @ 6:30pm
The Go Programming Language Specification - The Go Programming Language - http://golang.org/ref/spec
Justifications:
- C++ too complex
- compilation too slow
- programming to difficult
- easy over safety and efficiency
Issues:
- Name "Go" is ungoogable / hastagable (use golang) *** MOST ANNOYING ***
Companies who use Go:
- PayPal
- Github
- MongoDB
- Canonical
- Mozilla
- Stack Overflow
- Puppet Labs
Twitter: #golang
Prediction: Will become dominant language for LaaS and PaaS in 24 months
Go is...
- Compiled
- Strongly typed
- Statically typed
- Garbage collected
- Similar to C syntax
- Capable of statically verified duck typing (via interfaces)
- Open Source
Hello World:
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Note: Semi colons are optional.
Variables:
pakcage main
import "fmt"
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
When variables are first initialized, they are always set to their "zero" value. There isn't a null value?
Comments:
// comments use C's syntax /* multi line comment */
Functions:
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
func main() {
fmt.Println(...??
}
Types:
- bool
- string
- int, int32, ...
- uint, uint8, ...
- byte
- rune alias for int32
- float32
- complex64
Type conversions - no implicit conversions (have to manually cast)
Looping - Go only has 'for'
for i := 0; i < MAX ; i++ { ... }
While:
for ; sum < 1000; { sum += sum }
for sum < 1000 { sum += sum }
If/Else
if x < 0 { ... }
else if x > 0 { ... }
else { ... }
Don't fear Go pointers
type Coordinate struct {
X int
Y int
Z int
name string
}
func GCP() *Coordinate {
return &Coordinate{1, 2, 3, "foo"}
}
func main() {
var cp *Coorindate = getCCP()
fmt.Println(cp)
fmt.Printf("%T\n", cp)
...
}
Slices
Range
var pow = []int{1, 2, 3}
func main() {
for i, v := range pow {
fmt.Printf("%d: %d\n", i, v)
}
}
for _, v := range pow { ... }
// underscore is special
Maps
Access is marked public/private by the first letter of the member. Public is capital. Private is lowercase.
No assertions?
Structs in Go - instead of classes in Object Oriented Programming
type House struct { }
func (h House) GetHouseName() string { } //method defined outside of struct, but works on House
Interfaces are super important in Go.
type noiser interface{
GetNoise() string
}
type Cow struct{} // empty structs
type Fox struct{}
func (f Fox) GetNoise() string { ... }