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