Golang

Go documentation

docs

The official Go site has the tour, package docs, and language spec.

Quickstart (module + run)

bash
mkdir my-go && cd my-go
go mod init example.com/my-go
cat > main.go <<'EOF'
package main

import "fmt"

func main() { fmt.Println("hello") }
EOF

go run .

Project setup (common layout)

text
cmd/      # main packages
internal/ # private packages
pkg/      # shared libraries (optional)

Basic types + function

go
package main

import "fmt"

type User struct {
	ID    string
	Email string
}

func main() {
	u := User{ID: "1", Email: "a@b.com"}
	fmt.Println(u.Email)
}

Error wrapping

go
if err != nil {
	return fmt.Errorf("open config: %w", err)
}

Variables (var, :=, const)

go
var a int = 1
b := "hi" // inferred
const pi = 3.14159

Datatypes (slice, map)

go
xs := []int{1, 2, 3}
m := map[string]int{"a": 1}
xs = append(xs, 4)

Iteration (for forms)

go
for i := 0; i < 3; i++ {
	// ...
}

for i, x := range []string{"a", "b"} {
	_ = i
	_ = x
}

Functions (multiple returns)

go
func div(a, b int) (int, error) {
	if b == 0 {
		return 0, fmt.Errorf("divide by zero")
	}
	return a / b, nil
}

Methods (receiver)

go
type Counter struct{ N int }

func (c *Counter) Inc() { c.N++ }

Interfaces (implicit)

go
type Stringer interface {
	String() string
}

type User struct{ Email string }
func (u User) String() string { return u.Email }