Go на примерах: Структуры

Структуры в Go — это типизированные коллекции полей. Они полезны для группировки данных в записи.

package main
import "fmt"

Эта структура person имеет поля name и age.

type person struct {
    name string
    age  int
}

newPerson создаёт новую структуру person с заданным именем.

func newPerson(name string) *person {

Go — язык со сборкой мусора; ты можешь безопасно возвращать указатель на локальную переменную — она будет освобождена сборщиком мусора только когда на неё не останется активных ссылок.

    p := person{name: name}
    p.age = 42
    return &p
}
func main() {

Такой синтаксис создаёт новую структуру.

    fmt.Println(person{"Bob", 20})

При инициализации структуры можно указывать имена полей.

    fmt.Println(person{name: "Alice", age: 30})

Пропущенные поля получат нулевые значения.

    fmt.Println(person{name: "Fred"})

Префикс & возвращает указатель на структуру.

    fmt.Println(&person{name: "Ann", age: 40})

Идиоматично инкапсулировать создание структуры в функции-конструкторе.

    fmt.Println(newPerson("Jon"))

Доступ к полям структуры осуществляется через точку.

    s := person{name: "Sean", age: 50}
    fmt.Println(s.name)

Точку можно использовать и с указателями на структуру — указатели разыменовываются автоматически.

    sp := &s
    fmt.Println(sp.age)

Структуры изменяемы.

    sp.age = 51
    fmt.Println(sp.age)

Если тип структуры используется только для одного значения, ему можно не давать имя. Значение может иметь анонимный тип структуры. Этот приём часто используется для табличных тестов.

    dog := struct {
        name   string
        isGood bool
    }{
        "Rex",
        true,
    }
    fmt.Println(dog)
}
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
&{Jon 42}
Sean
50
51
{Rex true}

Далее: .