структуры
This commit is contained in:
parent
1a20196be5
commit
063c61fb31
@ -15,7 +15,7 @@ Switch
|
|||||||
Замыкания (Closures)
|
Замыкания (Closures)
|
||||||
Рекурсия (Recursion)
|
Рекурсия (Recursion)
|
||||||
Указатели (Pointers)
|
Указатели (Pointers)
|
||||||
Structs
|
Структуры (Structs)
|
||||||
Methods
|
Methods
|
||||||
Interfaces
|
Interfaces
|
||||||
Errors
|
Errors
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user