Structs

Структуры (Structs)|Structs #

// _Структуры_ в Go - это коллекции полей определенных
// типов. Как правило, они используются для логической
// группировки данных.

package main

import "fmt"

// Структура `person` имеет два поля `name` и `age`.
type person struct {
	name string
	age  int
}

// Функция NewPerson создает новую струкутуру person с
// заданным именем.
func NewPerson(name string) *person {
	// Вы можете безопасно вернуть указатель на локальную
	// переменную, так как локальная переменная переживет
	// область действия функции.
	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)
}
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
Sean
50
51
&{Jon 42}