У меня странная ошибка на Голанге.
ОС: Linux Ubuntu 18.04.
Процессор: AMD с поддержкой 64 бит.
IDE - Голанд 2018.1.5.
Версия Go - 1.10.1.
Компилятор имеет значение: «Любой».
Я пробовал оба компилятора 'gc' и 'gccgo'. Результат тот же.
В приведенной ниже программе отладчик показывает странные вещи. Переменная 'aUnion' имеет внутри себя "John", но переменная "aRecord", в которой есть тип Union, не имеет внутри "John".
Если я их 'fmt.Printf', они оба там, но отладчик не показывает Джона внутри 'aRecord'.
Это ошибка отладчика?
Программа очень проста. Просто вложенные структуры передаются как указатель.
// 33.go.
package main
import "fmt"
type Person struct {
Name string
Age int
}
type GroupOfPeople struct {
Name string
People []*Person
}
type Union struct {
ID int
Group *GroupOfPeople
}
type Record struct {
UnionField *Union
Type int
}
func main() {
var aPerson *Person
var people []*Person
var aGroup *GroupOfPeople
var aUnion *Union
var aRecord *Record
aPerson = &Person{
Name: "John",
Age: 10,
}
people = []*Person{aPerson}
aGroup = &GroupOfPeople{
Name: "A Group",
People: people,
}
aUnion = &Union{
ID: 123,
Group: aGroup,
} // John is inside 'aUnion'.
aRecord = &Record{
UnionField: aUnion,
Type: 666,
}
// John is NOT inside 'aRecord'.
// WHY ?!
fmt.Printf("aUnion: %+v.\r\n", aUnion.Group.People[0])
fmt.Printf("aRecord: %+v.\r\n", aRecord.UnionField.Group.People[0])
}
Спасибо за помощь!