структуры

This commit is contained in:
badkaktus 2019-10-07 14:49:11 +03:00
parent 1a20196be5
commit 063c61fb31
2 changed files with 23 additions and 17 deletions

View File

@ -15,7 +15,7 @@ Switch
Замыкания (Closures) Замыкания (Closures)
Рекурсия (Recursion) Рекурсия (Recursion)
Указатели (Pointers) Указатели (Pointers)
Structs Структуры (Structs)
Methods Methods
Interfaces Interfaces
Errors Errors

View File

@ -1,21 +1,23 @@
// Go's _structs_ are typed collections of fields. // _Структуры_ в Go - это коллекции полей определенных
// They're useful for grouping data together to form // типов. Как правило, они используются для логической
// records. // группировки данных.
package main package main
import "fmt" import "fmt"
// This `person` struct type has `name` and `age` fields. // Структура `person` имеет два поля `name` и `age`.
type person struct { type person struct {
name string name string
age int age int
} }
// NewPerson constructs a new person struct with the given name // Функция NewPerson создает новую струкутуру person с
// заданным именем.
func NewPerson(name string) *person { func NewPerson(name string) *person {
// You can safely return a pointer to local variable // Вы можете безопасно вернуть указатель на локальную
// as a local variable will survive the scope of the function. // переменную, так как локальная переменная переживет
// область действия функции.
p := person{name: name} p := person{name: name}
p.age = 42 p.age = 42
return &p return &p
@ -23,31 +25,35 @@ func NewPerson(name string) *person {
func main() { func main() {
// This syntax creates a new struct. // Так создается новая структура
fmt.Println(person{"Bob", 20}) fmt.Println(person{"Bob", 20})
// You can name the fields when initializing a struct. // Вы можете задавать имена для корректного
// присваивания значений при создании структуры
fmt.Println(person{name: "Alice", age: 30}) fmt.Println(person{name: "Alice", age: 30})
// Omitted fields will be zero-valued. // Пропущенные поля будут нулевыми.
fmt.Println(person{name: "Fred"}) fmt.Println(person{name: "Fred"})
// An `&` prefix yields a pointer to the struct. // Префикс `&` возвращает указатель на структуру.
fmt.Println(&person{name: "Ann", age: 40}) fmt.Println(&person{name: "Ann", age: 40})
// It's idiomatic to encapsulate new struct creation in constructor functions // Можно инкапсулировать создание новой структуры
// в функцию
fmt.Println(NewPerson("Jon")) fmt.Println(NewPerson("Jon"))
// Access struct fields with a dot. // Доступ к полям структуры осуществляется через
// точку.
s := person{name: "Sean", age: 50} s := person{name: "Sean", age: 50}
fmt.Println(s.name) fmt.Println(s.name)
// You can also use dots with struct pointers - the // Вы также можете использовать точки со
// pointers are automatically dereferenced. // структурными указателями - указатели автоматически
// разыменовываются.
sp := &s sp := &s
fmt.Println(sp.age) fmt.Println(sp.age)
// Structs are mutable. // Структуры мутабельны.
sp.age = 51 sp.age = 51
fmt.Println(sp.age) fmt.Println(sp.age)
} }