2019-10-07 14:49:11 +03:00

60 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// _Структуры_ в 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)
}