02.4
This commit is contained in:
22
ru/02.4.md
22
ru/02.4.md
@@ -9,7 +9,7 @@
|
||||
age int
|
||||
}
|
||||
|
||||
Смотрите, как легко определять `структуру`!
|
||||
Вот так как легко определять `структуру`!
|
||||
|
||||
У нас есть два поля:
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
P := person{"Tom", 25}
|
||||
|
||||
- Исопльзовать формат `поле:значение`, чтобы задать начальные значение структуры, при этом можно не соблюдать порядок, в котором поля шли при описании структуры:
|
||||
- Использовать формат `поле:значение`, чтобы задать начальные значения полей структуры, при этом можно не соблюдать порядок, в котором поля шли при описании структуры:
|
||||
|
||||
P := person{age:24, name:"Bob"}
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
age int
|
||||
}
|
||||
|
||||
// сравниваем возраст у двух людей, затем возвращаем возраст старшего из них и разницу в возрасте
|
||||
// струстуры передаются по значению
|
||||
// сравниваем возраст у двух людей, затем возвращаем возраст старшего из них и разницу в возрасте.
|
||||
// структуры передаются по значению
|
||||
func Older(p1, p2 person) (person, int) {
|
||||
if p1.age>p2.age {
|
||||
return p1, p1.age-p2.age
|
||||
@@ -88,11 +88,11 @@
|
||||
|
||||
### Встраиваемые поля в структуре
|
||||
|
||||
Я только что показал Вам как определять структуру с именами и типами полей. Но Go поддерживает и поля с типами, но без имен. Мы называем это встраиваемыми полями.
|
||||
Я только что показал Вам, как определять структуру с именами и типами полей. Но Go поддерживает и поля с типами, но без имен. Мы называем это встраиваемыми полями.
|
||||
|
||||
Когда встраиваемое поле - структура, все поля этой структуры неявно становятся полями структуры, в которую оно встроено.
|
||||
|
||||
Посмторим на пример:
|
||||
Посмотрим на пример:
|
||||
|
||||
package main
|
||||
import "fmt"
|
||||
@@ -125,7 +125,7 @@
|
||||
fmt.Println("Марк постарел")
|
||||
mark.age = 46
|
||||
fmt.Println("Его возраст: ", mark.age)
|
||||
// изменияем массу
|
||||
// изменяем массу
|
||||
fmt.Println("Марк больше не атлет")
|
||||
mark.weight += 60
|
||||
fmt.Println("Его масса: ", mark.weight)
|
||||
@@ -179,11 +179,11 @@
|
||||
fmt.Println("Ее любимое число: ", jane.int)
|
||||
}
|
||||
|
||||
В примере выше мы можем видеть, что данные всех типов могут быть встраиваемыми полями, и мы можем исопльзовать функции, чтобы оперировать ими.
|
||||
В примере выше мы можем видеть, что данные всех типов могут быть встраиваемыми полями, и мы можем использовать функции, чтобы оперировать ими.
|
||||
|
||||
Есть, впрочем, одна проблема. Если у Human есть поле под названием `phone`, а у Student тоже есть поле с таким именем, как нам быть?
|
||||
Есть, впрочем, одна проблема. Если у `Human` есть поле под названием `phone`, а у `Student` тоже есть поле с таким именем, как нам быть?
|
||||
|
||||
В Go есть простой способ решить эту задачу. Внешние поля имеют уровень доступа выше, что означает, что, обращаясь к `student.phone`, мы оперируем с полем phone в student,а не в Human. Это свойство проще представить как `перегрузку` полей.
|
||||
В Go есть простой способ решить эту задачу. Внешние поля имеют уровень доступа выше, что означает, что, обращаясь к `student.phone`, мы оперируем с полем `phone` в `student`,а не в `Human`. Это свойство проще представить как `перегрузку` полей.
|
||||
|
||||
package main
|
||||
import "fmt"
|
||||
@@ -211,4 +211,4 @@
|
||||
|
||||
- [Содержание](preface.md)
|
||||
- Предыдущий раздел: [Управляющие конструкции и функции](02.3.md)
|
||||
- Следующий раздел: [Объектно-ориентированные программирование](02.5.md)
|
||||
- Следующий раздел: [Объектно-ориентированное программирование](02.5.md)
|
||||
|
||||
Reference in New Issue
Block a user