Проблемы с отладчиком Голанда - PullRequest
0 голосов
/ 01 июля 2018

У меня странная ошибка на Голанге.

ОС: 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])
    }

Спасибо за помощь!

1 Ответ

0 голосов
/ 01 июля 2018

Это проблема в том, как GoLand обрабатывает вложение значений этих переменных во время выполнения.

Я создал эту проблему , чтобы отследить и исправить ее.

Между тем, вы можете использовать функцию «Часы», чтобы отследить «aRecord.UnionField.Group.People» в качестве примера, который затем будет корректно отображать значения. Приносим извинения за неудобства.

...