Структуры

Структура объединяет поля разных типов под одним именем:

type Point struct {
    X float64
    Y float64
}

p := Point{X: 1.0, Y: 2.5}
fmt.Println(p.X)   // 1.0

Поля с прописной буквы — экспортируемые (видны из других пакетов). Строчные — приватные.

type Animal struct {
    Name string
}

type Dog struct {
    Animal          // встраивание
    Breed string
}

d := Dog{Animal: Animal{Name: "Rex"}, Breed: "Husky"}
fmt.Println(d.Name)   // Rex — поднято из Animal

Если все поля сравнимы — структуры можно сравнивать через ==:

p1 := Point{1, 2}
p2 := Point{1, 2}
fmt.Println(p1 == p2)   // true

Go не имеет отдельного типа enum. Стандартный паттерн — типизированные константы с iota:

type Direction int

const (
    North Direction = iota
    East
    South
    West
)

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}

ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2easy
3Упражнение 3medium