This commit is contained in:
Slava Zgordan
2015-08-18 11:41:29 +02:00
parent a7a2a6473e
commit 4bdcad6388

View File

@@ -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)