spec обозначает это как внедренное поле :
Поле, объявленное с типом, но без явного имени поля, называется встроенное поле .[...]
struct {
T1 // field name is T1
...
}
Я не уверен, что вы подразумеваете под "использованием одного типа структуры в другом типе структуры", но вы используете person
внутри secretAgent
, встраивая одинТип структуры внутри другого.Поля person
также в большинстве случаев работают как члены secretAgent
:
Продвигаемые поля действуют как обычные поля структуры, за исключением того, что они не могут использоваться в качестве имен полей в составных литералах.структуры.
Таким образом, вы можете сказать:
sa1 := secretAgent{
person: person{
first: "James",
last: "Bond",
age: 32,
},
ltk: true,
}
и
sa1.first
, но не:
sa1 := secretAgent{
first: "James",
last: "Bond",
age: 32,
ltk: true,
}
Вытакже можно явно ссылаться на встроенные поля person
через person
:
// As a promoted field...
sa1.first
// More explicitly...
sa1.person.first